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...

相关推荐
AKULAKK17 小时前
关于在Ghost版Win7上运行.net 2程序遇到的问题以及解决办法
.net·win7
波力海苔夹心脆67518 小时前
C# 序列化与反序列化详解:System.Text.Json、Newtonsoft.Json、XmlSerializer 用法、特性选项与安全实践
经验分享·后端·c#·json·.net
mudtools1 天前
在.NET现有系统中快速集成飞书任务分配能力
后端·c#·.net
小羊没烦恼!1 天前
【译】利用Asp.net MVC处理文件的上传下载
开发语言·缓存·c#·word·powerpoint·.net
唐青枫3 天前
我用 C# 开发了一款电子发票自动整理工具
c#·.net
我是唐青枫3 天前
我用 C# 开发了一款电子发票自动整理工具
c#·.net
唐青枫3 天前
别把 WPF 写成一个 MainWindow:C#.NET Prism 模块化开发详解
c#·.net
小羊没烦恼!8 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
_Jonas8 天前
.net framework开发环境正式环境配置文件的切换
.net·wpf
Y38153266210 天前
C# 调用谷歌搜索 API:HttpClient 与 System.Text.Json 实战
搜索引擎·.net