@@ -11,6 +11,12 @@ namespace WebApiClientCore
11
11
/// </summary>
12
12
public class HttpApiOptions
13
13
{
14
+ private JsonSerializerOptions ? jsonSerializeOptions ;
15
+ private JsonSerializerOptions ? jsonDeserializeOptions ;
16
+ private XmlWriterSettings ? xmlSerializeOptions ;
17
+ private XmlReaderSettings ? xmlDeserializeOptions ;
18
+ private KeyValueSerializerOptions ? keyValueSerializeOptions ;
19
+
14
20
/// <summary>
15
21
/// 获取或设置Http服务完整主机域名
16
22
/// 例如http://www.abc.com/或http://www.abc.com/path/
@@ -31,55 +37,91 @@ public class HttpApiOptions
31
37
/// <summary>
32
38
/// 获取json序列化选项
33
39
/// </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
+ }
35
51
36
52
/// <summary>
37
53
/// 获取json反序列化选项
38
54
/// </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
+ }
40
66
41
67
/// <summary>
42
68
/// xml序列化选项
43
69
/// </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
+ }
45
81
46
82
/// <summary>
47
83
/// xml反序列化选项
48
84
/// </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
+ }
50
96
51
97
/// <summary>
52
98
/// 获取keyValue序列化选项
53
99
/// </summary>
54
- public KeyValueSerializerOptions KeyValueSerializeOptions { get ; } = new KeyValueSerializerOptions ( ) ;
55
-
56
- /// <summary>
57
- /// HttpApi选项
58
- /// </summary>
59
- public HttpApiOptions ( )
100
+ public KeyValueSerializerOptions KeyValueSerializeOptions
60
101
{
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
+ }
63
110
}
64
111
112
+
65
113
/// <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 ( )
70
117
{
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
+ } ;
75
125
}
76
126
}
77
-
78
- /// <summary>
79
- /// 表示HttpApi选项
80
- /// </summary>
81
- /// <typeparam name="THttpApi"></typeparam>
82
- public class HttpApiOptions < THttpApi > : HttpApiOptions
83
- {
84
- }
85
127
}
0 commit comments