Skip to content

Commit 4c335ab

Browse files
committed
options访问时才初始化
1 parent c982510 commit 4c335ab

File tree

3 files changed

+92
-28
lines changed

3 files changed

+92
-28
lines changed

WebApiClientCore.Benchmarks/WebApiClientCore.Benchmarks.csproj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@
77
<AssemblyOriginatorKeyFile>Sign.snk</AssemblyOriginatorKeyFile>
88
</PropertyGroup>
99

10+
<ItemGroup>
11+
<Compile Remove="Buffers\**" />
12+
<Compile Remove="CreateInstances\**" />
13+
<Compile Remove="StringReplaces\**" />
14+
<EmbeddedResource Remove="Buffers\**" />
15+
<EmbeddedResource Remove="CreateInstances\**" />
16+
<EmbeddedResource Remove="StringReplaces\**" />
17+
<None Remove="Buffers\**" />
18+
<None Remove="CreateInstances\**" />
19+
<None Remove="StringReplaces\**" />
20+
</ItemGroup>
21+
1022
<ItemGroup>
1123
<PackageReference Include="BenchmarkDotNet" Version="0.12.1" />
1224
<PackageReference Include="Refit.HttpClientFactory" Version="5.1.67" />

WebApiClientCore/HttpApiOptions.cs

Lines changed: 70 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

WebApiClientCore/HttpApiOptions~.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace WebApiClientCore
2+
{
3+
/// <summary>
4+
/// 表示HttpApi选项
5+
/// </summary>
6+
/// <typeparam name="THttpApi"></typeparam>
7+
public class HttpApiOptions<THttpApi> : HttpApiOptions
8+
{
9+
}
10+
}

0 commit comments

Comments
 (0)