Newtonsoft技巧/与System.Text.Json的对比

.Net的Json序列化库中, 首选Newtonsoft、

但微软维护的System.Text.Json也有优势的方面;现时点的pros/cons比较如下:

Newtonsoft Json System.Text.Json
默认选项基本符合大多数人需求 要按需设置全局选项
默认序列化 public field 默认不序列化 public field
默认忽略大小写 默认强制大小写
尽量避免转义 默认转义非 ASCII 字符
默认支持注释 默认不支持注释
默认支持最后一个逗号 默认不支持
支持的基础类型更广 某些类型需要自己实现
支持多态 基本不支持多态
不支持异步 支持异步

Newtonsoft Json 简单方便、功能多、性能低。

System.Text.Json 使用复杂、功能少、性能相对高(性能最高的是Swifter.Json)。

※以下是Newtonsoft使用技巧

csharp 复制代码
//标识在类上,表示类中所有public成员会被序列化
[JsonObject(MemberSerialization.OptOut)]

//标识在类上,表示类中所有public成员不会被序列化
[JsonObject(MemberSerialization.OptIn)]

//标识在private属性名上,则可作为序列化对象
[JsonProperty]

//标识在属性名上,表示其与类的整体规则相反
[JsonIgnore]
ini 复制代码
//序列化时,剔除实体中null值的成员
JsonSerializerSettings jSet =new JsonSerializerSettings();
jSet.NullValueHandling = NullValueHandling.Ignore;
JsonConvert.SerializeObject(obj, Formatting.Indented, jSet);//通过Indeted格式化生成的Json,使其折行显示。
↓↓↓
//或者,标识在属性名上,
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
ini 复制代码
//对日期类型,按指定格式序列化
JsonSerializerSettings jSet =new JsonSerializerSettings();
jSet.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat;
jSet.DateFormatString = "yyyy-MM-dd HH:mm:ss";
↓↓↓
//如果是标准格式,也可标识在DataTime类型的属性名上
[JsonConverter(typeof(IsoDateTimeConverter))]
csharp 复制代码
//标识在属性名上,不改变属性名,表示序列化后字段名称
[JsonProperty(PropertyName = "xxxxxx")]
csharp 复制代码
//枚举类的序列化,实现枚举值转换成对应的名称
[JsonConverter(typeof(StringEnumConverter))]
sql 复制代码
//并不是简单的序列化,还需要有所加工(例如:decimal型的整数转换后,带上.0;Boolean的true转成"是")
//则可以通过继承JsonConverter,自定义类型
ini 复制代码
//共通的规则,实现全局序列化设置(避免分别设置的麻烦)
Newtonsoft.Json.JsonConvert.DefaultSettings = () =>
{
    ... ...
}
scss 复制代码
//合并多个json到一个Model
JsonConvert.PopulateObject(json1, xxxModel);
JsonConvert.PopulateObject(json2,  xxxModel);

【参照】

www.newtonsoft.com/json/help/h...

www.cnblogs.com/thomerson/p...

www.pianshen.com/article/661...

qiita.com/jun1s/items...

www.thinbug.com/q/51086115

dotblogs.com.tw/AceLee/2018...

zhuanlan.zhihu.com/p/149758306

www.cnblogs.com/Lulus/p/169...

qiita.com/tkt989/item...

www.cnblogs.com/yibinboy/p/...

www.nextdoorwith.info/wp/se/net-c...

相关推荐
我是唐青枫13 小时前
C#.NET StructureMap 从依赖注入到项目实战
开发语言·c#·.net
Lost of 程序猿14 小时前
C# 12 / .NET 9 新特性机制深度:编译器替你写了什么,哪些糖吃下去会出事
windows·c#·.net
唐青枫1 天前
C#.NET StructureMap 从依赖注入到项目实战
c#·.net
智码看视界2 天前
.NET 10 推理大模型TensorSharp 3.3.0 部署实测:纯.NET推理引擎反超llama.cpp 1.5倍,DFlash2提速62%
c#·.net·llama.cpp·.net 10·tensorsharp·本地大模型推理·开源推理引擎
唐青枫2 天前
别把日志、权限写进业务方法:C#.NET 动态代理从原理到实战
c#·.net
风云2 天前
Vane.Dispatch 1.0.0 发布:一个与容器、传输层零耦合的 .NET 服务分发引擎
微服务·mvc·.net·ndf·vane.dispatch
张人玉3 天前
基于 C# WinForms + .NET 8 + SQLite + TCP Socket 的多连接通讯调试工具——TCP通讯助手(TcpAssistant)
tcp/ip·sqlite·c#·.net
mldong3 天前
C# 开发者也有自己的轻量工作流引擎了:NuGet 装包,5 分钟跑通一条审批流
后端·c#·.net
风云3 天前
MiniLog 1.0 GA 发布:零分配、零依赖的 .NET 高性能日志框架
开源·c#·.net·日志·高性能·minilog