.NET Json序列化方案选择
在C#中,进行JSON序列化和反序列化有多种方案可供选择,常用的是下面俩个
System.Text.Json:这是.NET Core和.NET 5中内置的JSON序列化和反序列化库,提供了高性能和低内存消耗的JSON处理能力。
Newtonsoft.Json:这是一个流行的第三方JSON处理库,广泛用于Framework中的JSON序列化和反序列化。
还有一个DataContractJsonSerializer:这是System.Runtime.Serialization命名空间下的序列化方案,因性能较差、功能受限,正逐步被Newtonsoft.Json及System.Text.Json替换
我们在使用过程中如何选择方案
.NET Framework
我们建议使用Newtonsoft.Json
System.Text.Json在.NET Framwork,需要通过Nuget安装。
分别序列化一个小对象,按秒表计时对比下输出耗时
1 System.Text.Json.JsonSerializer.Serialize(new TestMode() 2 { 3 ExePath = cAaExe, 4 Args = args, 5 }); 6 7 JsonConvert.SerializeObject(new TestMode() 8 { 9 ExePath = cAaExe, 10 Args = args, 11 });
首次序列化 System.Text.Json: 248ms,Newtonsoft.Json: 17ms
二次序列化 System.Text.Json: 0ms,Newtonsoft.Json: 0ms
详细的BenchMark性能数据对比,.NET472版本1000次序列化:

所以.NET Framework中,我们使用Newtonsoft.Json,另外库的功能性、社区支持度、稳定性都比较好。
.NET
我们建议使用System.Text.Json,库在.NET Core 3.0+ 和 .NET 5+内是自带的。
Newtonsoft.Json在.NET Core和.NET 5+中也可以使用该库,但其性能和内存消耗略高于System.Text.Json。
我们对比下延时:
首次序列化 System.Text.Json: 31ms,Newtonsoft.Json: 128ms
二次序列化 System.Text.Json: 0ms,Newtonsoft.Json: 0ms
另外,不要安装System.Text.Json的Nuget包,否则首次序列化耗时System.Text.Json: 150ms。
看下详细的Benchmark数据对比,1000次序列化:

上面测试代码详见:JsonPerformanceTest/WpfApp2/BenchmarkTest.cs at master · kybs00/JsonPerformanceTest
值得说下,一些简单对象的序列化,不存在后续扩展、变更的场景,可以直接用字符串格式化,性能杠杠的。

浙公网安备 33010602011771号