Skip to content

Commit 2abb946

Browse files
committed
CO2NET v2.0.2.1 添加 XmlUtility.Deserialize() 重写方法
1 parent 8ce86e4 commit 2abb946

File tree

2 files changed

+127
-104
lines changed

2 files changed

+127
-104
lines changed

src/Senparc.CO2NET/Senparc.CO2NET.csproj

Lines changed: 92 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<TargetFrameworks>net451;netstandard2.0;netstandard2.1</TargetFrameworks>
4-
<Version>2.0.1</Version>
4+
<Version>2.0.2.1</Version>
55
<LangVersion>8.0</LangVersion>
66
<AssemblyName>Senparc.CO2NET</AssemblyName>
77
<RootNamespace>Senparc.CO2NET</RootNamespace>
@@ -23,97 +23,99 @@
2323
<PackageProjectUrl>https://github.com/Senparc/Senparc.CO2NET</PackageProjectUrl>
2424
<PackageIcon>icon.jpg</PackageIcon>
2525
<PackageReleaseNotes>
26-
v0.1.0 构建基础代码,从 Senparc.Weixin 分离公共代码
27-
v0.1.1 优化代码,单元测试接近100%覆盖
28-
v0.1.2 添加 IDomainExtensionCacheStrategy.RegisterCacheStrategyDomain() 方法
29-
v0.1.3 添加 EntityUtility.FillSystemType()方法对 Int32[] 和 Int64[] 的处理
30-
v0.1.4 添加 SenparcSetting 全局配置属性
31-
v0.1.5 RegisterServiceExtension.AddSenparcGlobalServices() 方法可自动获取 SenparcSetting 全局设置
32-
v0.1.6 解决 XXE 漏洞,继承自 XmlDocument 对象,自动将 XmlResolver 设为 null
33-
v0.1.6.1 添加 Register.UseSenparcGlobal() 方
34-
v0.1.7 扩展 ReflectionHelper.GetStaticMember() 方法
35-
v0.1.8 .net core 下的 RegisterService.Start() 方法中,env 可以传入 null,以便在控制台等环境中完成注册
36-
v0.1.9
37-
1、RegisterService 取消 public 的构造函数,统一使用 RegisterService.Start() 初始化
38-
2、重构 Register.UseSenparcGlobal() 方法,承担扩展缓存扫描功能
39-
3、添加 UnregisteredDomainCacheStrategyException 异常类型
40-
4、 .net framework 和 .net core 版本统一强制在构造函数中要求提供 SenparcSetting 参数
41-
v0.1.10 调整 SenparcSetting 参数,将分布式缓存连接信息归入到 SenparcSetting 中
42-
v0.1.11 提供 SenparcSetting.BuildFromWebConfig() 方法
26+
v0.1.0 构建基础代码,从 Senparc.Weixin 分离公共代码
27+
v0.1.1 优化代码,单元测试接近100%覆盖
28+
v0.1.2 添加 IDomainExtensionCacheStrategy.RegisterCacheStrategyDomain() 方法
29+
v0.1.3 添加 EntityUtility.FillSystemType()方法对 Int32[] 和 Int64[] 的处理
30+
v0.1.4 添加 SenparcSetting 全局配置属性
31+
v0.1.5 RegisterServiceExtension.AddSenparcGlobalServices() 方法可自动获取 SenparcSetting 全局设置
32+
v0.1.6 解决 XXE 漏洞,继承自 XmlDocument 对象,自动将 XmlResolver 设为 null
33+
v0.1.6.1 添加 Register.UseSenparcGlobal() 方
34+
v0.1.7 扩展 ReflectionHelper.GetStaticMember() 方法
35+
v0.1.8 .net core 下的 RegisterService.Start() 方法中,env 可以传入 null,以便在控制台等环境中完成注册
36+
v0.1.9
37+
1、RegisterService 取消 public 的构造函数,统一使用 RegisterService.Start() 初始化
38+
2、重构 Register.UseSenparcGlobal() 方法,承担扩展缓存扫描功能
39+
3、添加 UnregisteredDomainCacheStrategyException 异常类型
40+
4、 .net framework 和 .net core 版本统一强制在构造函数中要求提供 SenparcSetting 参数
41+
v0.1.10 调整 SenparcSetting 参数,将分布式缓存连接信息归入到 SenparcSetting 中
42+
v0.1.11 提供 SenparcSetting.BuildFromWebConfig() 方法
4343

44-
v0.2.0 缓存策略提供超时设置接口
45-
v0.2.1 “当前扩展缓存策略没有进行注册”异常信息提供更加详细的缓存类型信息
46-
v0.2.2 RequestExtension 添加对 NETSTANDARD2_0 的支持
47-
v0.2.3 优化 RequestExtension.AbsoluteUri() 方法的输出结果
48-
v0.2.4
49-
1、添加 CacheException 缓存异常类型
50-
2、添加对 IMemoryCache 的未设置提示
51-
3、优化 UnregisteredDomainCacheStrategyException,使用 CacheException 作为基类
52-
v0.2.5 优化 SenparcID,其中所有方法支持 .net standard 2.0
53-
v0.2.6 增加 DateTimeHelper.GetUnixDateTime() 方法,标记过期 GetWeixinDateTime() 方法
54-
v0.2.7 添加 ServerUtility
55-
v0.2.8 添加 SenparcDI.GetIServiceProvider() 方法,以支持其他依赖注入框架
56-
v0.2.9
57-
1、优化 Config.RootDictionaryPath 方法,可自动获取默认值
58-
2、添加 SerializerHelper.GetObject(this string jsonString, Type type) 方法
59-
v0.2.10 ObjectExtensions.ToJson() 方法提供 indented 方法,支持缩进格式
60-
v0.2.11 修复 .NET Core 下模拟表单 Post 参数无效的问题
61-
v0.2.14 ToJson() 方法优化
62-
v0.2.15 Post 方法添加 headerAddition参数
63-
v0.2.17 启用 SystemTime.Now,方便单元测试或紧急情况下改动系统当前时间
64-
v0.2.18 支持 Senparc.CO2NET.APM
65-
v0.3.0 升级 SenparcTrace,使用队列
66-
v0.3.1 更新 RequestUtility.GetQueryString() 方法
67-
v0.4.0 使用 .NETStandard2.0 统一支持 .NET Core,放弃对 .NET Core 1.x 的单独适配
68-
v0.4.1 为 UrlEncode() 和 UrlDecode() 方法添加在 .net framework 环境下的编码类型选择
69-
v0.4.2 优化 ServerUtility 类中方法在 docker 或 linux 环境下的路径识别
70-
v0.4.3 使用 DateTimeOffset 取代 DateTime
71-
v0.4.4 提供 SenparcTrace.RecordAPMLog 参数RequestUtility.Post.cs
72-
v0.5.0 提供对 .NET Core Console 的全面支持
73-
v0.5.1 ToJson() 方法添加 jsonSerializerSettings 参数
74-
v0.5.1.1 添加 Sex.未设置 枚举值
75-
v0.5.2 添加 SenparcDI.GetRequiredService() 方法,提供线程内独立 ServiceProvider 实例
76-
v0.6.0 提供缓存异步接口
77-
v0.6.1 完善 SystemTime,添加 NowTicks 属性
78-
v0.7.0 优化 HttpClient,重构 RequestUtility(包括 Post 和 Get),引入 HttpClientFactory 机制
79-
v0.7.1
80-
1、添加 NowDiff 属性
81-
2、添加 DayOfWeekString、DILifecycleType 配置和枚举
82-
v0.7.1
83-
1、添加 NowDiff 属性
84-
2、添加 DayOfWeekString、DILifecycleType 配置和枚举
85-
3、修复:.NET 4.5 下 Post 方法未指定 content-type
86-
v0.7.2.1 解决 GetHttpClientHandler() 方法中 cookieContainer 为 null 可能发生的异常
87-
v0.7.3
88-
1、添加 HttpClientFactory 多证书方案
89-
2、使用 .ConfigureAwait(false) 避免异步锁死的情况
90-
v0.8
91-
1、停止提供对 .NET 3.5/4.0 的支持
92-
2、使用异步方法提升并发效率
93-
v0.8.3 添加 Stream 参数的 GetMD5() 方法
94-
v0.8.4 HttpUtility.HttpPost_Common_NetCore 所调用的额 CreateFileContent 取消对 fileName 参数的 UrlEncode 编码
95-
v0.8.5 解决 .NET Framework 4.5 下文件上传的 ContentType 设置问题
96-
v0.8.6 添加 FileHelper.FileInUse() 方法,用于判断文件是否正在被占用
97-
v0.8.7 RequestUtility.Post() 方法添加新功能:使用文件流模拟 Form 表单提交
98-
v0.8.8 改进 SenparcTrace 日志记录效率,提供异步方法处理
99-
v0.8.9 提供 AutoUnlockLogFile 参数,并针对日志文件可能被占用的情况尝试自动解锁。
100-
v0.8.10 提供 Config.HostingEnvironment 属性
101-
v0.9.0 添加 SystemTime.UtcDateTime 属性
102-
v0.9.1 提供带符号的 nuget 包(.snuget)
103-
v1.0.100 支持 .NET Core 3.0
104-
v1.0.101 RequestUtility.GetRequestMemoryStream() 增加对 .NET Core 3.0 AllowSynchronousIO 的设置
105-
v1.0.102
106-
1、提供新的 app.UseSenparcGlobal() 注册方法
107-
2、添加更多 SystemTime 辅助方法
108-
v1.0.103 优化异步方法
109-
v1.3.201 更新 Senparc.CO2NET.HttpUtility.Get.Download() 方法,修正 filename 判断正则表达式
110-
v1.4.400 修复 Download 方法 bug
44+
v0.2.0 缓存策略提供超时设置接口
45+
v0.2.1 “当前扩展缓存策略没有进行注册”异常信息提供更加详细的缓存类型信息
46+
v0.2.2 RequestExtension 添加对 NETSTANDARD2_0 的支持
47+
v0.2.3 优化 RequestExtension.AbsoluteUri() 方法的输出结果
48+
v0.2.4
49+
1、添加 CacheException 缓存异常类型
50+
2、添加对 IMemoryCache 的未设置提示
51+
3、优化 UnregisteredDomainCacheStrategyException,使用 CacheException 作为基类
52+
v0.2.5 优化 SenparcID,其中所有方法支持 .net standard 2.0
53+
v0.2.6 增加 DateTimeHelper.GetUnixDateTime() 方法,标记过期 GetWeixinDateTime() 方法
54+
v0.2.7 添加 ServerUtility
55+
v0.2.8 添加 SenparcDI.GetIServiceProvider() 方法,以支持其他依赖注入框架
56+
v0.2.9
57+
1、优化 Config.RootDictionaryPath 方法,可自动获取默认值
58+
2、添加 SerializerHelper.GetObject(this string jsonString, Type type) 方法
59+
v0.2.10 ObjectExtensions.ToJson() 方法提供 indented 方法,支持缩进格式
60+
v0.2.11 修复 .NET Core 下模拟表单 Post 参数无效的问题
61+
v0.2.14 ToJson() 方法优化
62+
v0.2.15 Post 方法添加 headerAddition参数
63+
v0.2.17 启用 SystemTime.Now,方便单元测试或紧急情况下改动系统当前时间
64+
v0.2.18 支持 Senparc.CO2NET.APM
65+
v0.3.0 升级 SenparcTrace,使用队列
66+
v0.3.1 更新 RequestUtility.GetQueryString() 方法
67+
v0.4.0 使用 .NETStandard2.0 统一支持 .NET Core,放弃对 .NET Core 1.x 的单独适配
68+
v0.4.1 为 UrlEncode() 和 UrlDecode() 方法添加在 .net framework 环境下的编码类型选择
69+
v0.4.2 优化 ServerUtility 类中方法在 docker 或 linux 环境下的路径识别
70+
v0.4.3 使用 DateTimeOffset 取代 DateTime
71+
v0.4.4 提供 SenparcTrace.RecordAPMLog 参数RequestUtility.Post.cs
72+
v0.5.0 提供对 .NET Core Console 的全面支持
73+
v0.5.1 ToJson() 方法添加 jsonSerializerSettings 参数
74+
v0.5.1.1 添加 Sex.未设置 枚举值
75+
v0.5.2 添加 SenparcDI.GetRequiredService() 方法,提供线程内独立 ServiceProvider 实例
76+
v0.6.0 提供缓存异步接口
77+
v0.6.1 完善 SystemTime,添加 NowTicks 属性
78+
v0.7.0 优化 HttpClient,重构 RequestUtility(包括 Post 和 Get),引入 HttpClientFactory 机制
79+
v0.7.1
80+
1、添加 NowDiff 属性
81+
2、添加 DayOfWeekString、DILifecycleType 配置和枚举
82+
v0.7.1
83+
1、添加 NowDiff 属性
84+
2、添加 DayOfWeekString、DILifecycleType 配置和枚举
85+
3、修复:.NET 4.5 下 Post 方法未指定 content-type
86+
v0.7.2.1 解决 GetHttpClientHandler() 方法中 cookieContainer 为 null 可能发生的异常
87+
v0.7.3
88+
1、添加 HttpClientFactory 多证书方案
89+
2、使用 .ConfigureAwait(false) 避免异步锁死的情况
90+
v0.8
91+
1、停止提供对 .NET 3.5/4.0 的支持
92+
2、使用异步方法提升并发效率
93+
v0.8.3 添加 Stream 参数的 GetMD5() 方法
94+
v0.8.4 HttpUtility.HttpPost_Common_NetCore 所调用的额 CreateFileContent 取消对 fileName 参数的 UrlEncode 编码
95+
v0.8.5 解决 .NET Framework 4.5 下文件上传的 ContentType 设置问题
96+
v0.8.6 添加 FileHelper.FileInUse() 方法,用于判断文件是否正在被占用
97+
v0.8.7 RequestUtility.Post() 方法添加新功能:使用文件流模拟 Form 表单提交
98+
v0.8.8 改进 SenparcTrace 日志记录效率,提供异步方法处理
99+
v0.8.9 提供 AutoUnlockLogFile 参数,并针对日志文件可能被占用的情况尝试自动解锁。
100+
v0.8.10 提供 Config.HostingEnvironment 属性
101+
v0.9.0 添加 SystemTime.UtcDateTime 属性
102+
v0.9.1 提供带符号的 nuget 包(.snuget)
103+
v1.0.100 支持 .NET Core 3.0
104+
v1.0.101 RequestUtility.GetRequestMemoryStream() 增加对 .NET Core 3.0 AllowSynchronousIO 的设置
105+
v1.0.102
106+
1、提供新的 app.UseSenparcGlobal() 注册方法
107+
2、添加更多 SystemTime 辅助方法
108+
v1.0.103 优化异步方法
109+
v1.3.201 更新 Senparc.CO2NET.HttpUtility.Get.Download() 方法,修正 filename 判断正则表达式
110+
v1.4.400 修复 Download 方法 bug
111111

112-
v1.5.2
113-
1、增加和丰富 EncryptHelper 中加密方法(SHA1、AesGcmDecrypt、CRC32)
114-
2、添加 FileHelper 中 GetFileHash 方法
115-
3、LocalCacheLock释放锁之前增加是否锁成功的判断
116-
</PackageReleaseNotes>
112+
v1.5.2
113+
1、增加和丰富 EncryptHelper 中加密方法(SHA1、AesGcmDecrypt、CRC32)
114+
2、添加 FileHelper 中 GetFileHash 方法
115+
3、LocalCacheLock释放锁之前增加是否锁成功的判断
116+
117+
v2.0.2 添加 XmlUtility.Deserialize() 重写方法
118+
</PackageReleaseNotes>
117119
<RepositoryUrl>https://github.com/Senparc/Senparc.CO2NET</RepositoryUrl>
118120
<Configurations>Debug;Release;Test</Configurations>
119121
</PropertyGroup>

src/Senparc.CO2NET/Utilities/XmlUtility/XmlUtility.cs

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ and limitations under the License.
4343
修改标识:Senparc - 20180601
4444
修改描述:v0.1.0 移植 XmlUtility
4545
46+
修改标识:Senparc - 20220208
47+
修改描述:v2.0.2 添加 XmlUtility.Deserialize() 重写方法
48+
4649
----------------------------------------------------------------*/
4750

4851
using System;
@@ -66,13 +69,21 @@ public static class XmlUtility
6669
/// </summary>
6770
/// <param name="xml">XML字符串</param>
6871
/// <returns></returns>
69-
public static object Deserialize<T>(string xml)
72+
public static object Deserialize(Type type, string xml, string rootNodeName = null)
7073
{
7174
try
7275
{
7376
using (StringReader sr = new StringReader(xml))
7477
{
75-
XmlSerializer xmldes = new XmlSerializer(typeof(T));
78+
XmlSerializer xmldes;
79+
if (rootNodeName != null)
80+
{
81+
xmldes=new XmlSerializer(type, new XmlRootAttribute(rootNodeName));
82+
}
83+
else
84+
{
85+
xmldes = new XmlSerializer(type);
86+
}
7687
return xmldes.Deserialize(sr);
7788
}
7889
}
@@ -83,6 +94,16 @@ public static object Deserialize<T>(string xml)
8394
}
8495
}
8596

97+
/// <summary>
98+
/// 反序列化
99+
/// </summary>
100+
/// <param name="xml">XML字符串</param>
101+
/// <returns></returns>
102+
public static object Deserialize<T>(string xml)
103+
{
104+
return Deserialize(typeof(T), xml);
105+
}
106+
86107
/// <summary>
87108
/// 反序列化
88109
/// </summary>
@@ -144,18 +165,18 @@ public static XDocument Convert(Stream stream)
144165
{
145166
return XDocument.Load(xr);
146167
}
147-
//#if NET451
148-
// using (XmlReader xr = XmlReader.Create(stream))
149-
// {
150-
// return XDocument.Load(xr);
151-
// }
152-
//#else
153-
// using (var sr = new StreamReader(stream))
154-
// {
155-
// var xml = sr.ReadToEnd();
156-
// return XDocument.Parse(xml);
157-
// }
158-
//#endif
168+
//#if NET451
169+
// using (XmlReader xr = XmlReader.Create(stream))
170+
// {
171+
// return XDocument.Load(xr);
172+
// }
173+
//#else
174+
// using (var sr = new StreamReader(stream))
175+
// {
176+
// var xml = sr.ReadToEnd();
177+
// return XDocument.Parse(xml);
178+
// }
179+
//#endif
159180
}
160181

161182
}

0 commit comments

Comments
 (0)