@@ -11,6 +11,12 @@ namespace WebApiClientCore
1111 /// </summary>
1212 public class HttpApiOptions
1313 {
14+ private JsonSerializerOptions ? jsonSerializeOptions ;
15+ private JsonSerializerOptions ? jsonDeserializeOptions ;
16+ private XmlWriterSettings ? xmlSerializeOptions ;
17+ private XmlReaderSettings ? xmlDeserializeOptions ;
18+ private KeyValueSerializerOptions ? keyValueSerializeOptions ;
19+
1420 /// <summary>
1521 /// 获取或设置Http服务完整主机域名
1622 /// 例如http://www.abc.com/或http://www.abc.com/path/
@@ -31,55 +37,91 @@ public class HttpApiOptions
3137 /// <summary>
3238 /// 获取json序列化选项
3339 /// </summary>
34- public JsonSerializerOptions JsonSerializeOptions { get ; } = new JsonSerializerOptions ( ) ;
40+ public JsonSerializerOptions JsonSerializeOptions
41+ {
42+ get
43+ {
44+ if ( this . jsonSerializeOptions == null )
45+ {
46+ this . jsonSerializeOptions = CreateDefaultJsonOptions ( ) ;
47+ }
48+ return this . jsonSerializeOptions ;
49+ }
50+ }
3551
3652 /// <summary>
3753 /// 获取json反序列化选项
3854 /// </summary>
39- public JsonSerializerOptions JsonDeserializeOptions { get ; } = new JsonSerializerOptions ( ) ;
55+ public JsonSerializerOptions JsonDeserializeOptions
56+ {
57+ get
58+ {
59+ if ( this . jsonDeserializeOptions == null )
60+ {
61+ this . jsonDeserializeOptions = CreateDefaultJsonOptions ( ) ;
62+ }
63+ return this . jsonDeserializeOptions ;
64+ }
65+ }
4066
4167 /// <summary>
4268 /// xml序列化选项
4369 /// </summary>
44- public XmlWriterSettings XmlSerializeOptions { get ; } = new XmlWriterSettings ( ) ;
70+ public XmlWriterSettings XmlSerializeOptions
71+ {
72+ get
73+ {
74+ if ( this . xmlSerializeOptions == null )
75+ {
76+ this . xmlSerializeOptions = new XmlWriterSettings ( ) ;
77+ }
78+ return this . xmlSerializeOptions ;
79+ }
80+ }
4581
4682 /// <summary>
4783 /// xml反序列化选项
4884 /// </summary>
49- public XmlReaderSettings XmlDeserializeOptions { get ; } = new XmlReaderSettings ( ) ;
85+ public XmlReaderSettings XmlDeserializeOptions
86+ {
87+ get
88+ {
89+ if ( this . xmlDeserializeOptions == null )
90+ {
91+ this . xmlDeserializeOptions = new XmlReaderSettings ( ) ;
92+ }
93+ return this . xmlDeserializeOptions ;
94+ }
95+ }
5096
5197 /// <summary>
5298 /// 获取keyValue序列化选项
5399 /// </summary>
54- public KeyValueSerializerOptions KeyValueSerializeOptions { get ; } = new KeyValueSerializerOptions ( ) ;
55-
56- /// <summary>
57- /// HttpApi选项
58- /// </summary>
59- public HttpApiOptions ( )
100+ public KeyValueSerializerOptions KeyValueSerializeOptions
60101 {
61- ConfigureJsonDefault ( this . JsonSerializeOptions ) ;
62- ConfigureJsonDefault ( this . JsonDeserializeOptions ) ;
102+ get
103+ {
104+ if ( this . keyValueSerializeOptions == null )
105+ {
106+ this . keyValueSerializeOptions = new KeyValueSerializerOptions ( ) ;
107+ }
108+ return this . keyValueSerializeOptions ;
109+ }
63110 }
64111
112+
65113 /// <summary>
66- /// 配置默认值
67- /// </summary>
68- /// <param name="options"></param>
69- private static void ConfigureJsonDefault ( JsonSerializerOptions options )
114+ /// 创建默认JsonSerializerOptions
115+ /// </summary>
116+ private static JsonSerializerOptions CreateDefaultJsonOptions ( )
70117 {
71- options . PropertyNameCaseInsensitive = true ;
72- options . PropertyNamingPolicy = JsonNamingPolicy . CamelCase ;
73- options . DictionaryKeyPolicy = JsonNamingPolicy . CamelCase ;
74- options . Encoder = JavaScriptEncoder . UnsafeRelaxedJsonEscaping ;
118+ return new JsonSerializerOptions
119+ {
120+ PropertyNameCaseInsensitive = true ,
121+ PropertyNamingPolicy = JsonNamingPolicy . CamelCase ,
122+ DictionaryKeyPolicy = JsonNamingPolicy . CamelCase ,
123+ Encoder = JavaScriptEncoder . UnsafeRelaxedJsonEscaping
124+ } ;
75125 }
76126 }
77-
78- /// <summary>
79- /// 表示HttpApi选项
80- /// </summary>
81- /// <typeparam name="THttpApi"></typeparam>
82- public class HttpApiOptions < THttpApi > : HttpApiOptions
83- {
84- }
85127}
0 commit comments