.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

值得说下,一些简单对象的序列化,不存在后续扩展、变更的场景,可以直接用字符串格式化,性能杠杠的。

posted @ 2024-01-25 16:43  唐宋元明清2188  阅读(220)  评论(0)    收藏  举报