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

相关推荐
哥是强混7 小时前
Means:基于 .NET 10 打造的开源自部署 S3 兼容对象存储服务
网络·数据库·.net
公子小六14 小时前
基于.NET的Windows窗体编程之WinForms图像控件
windows·microsoft·c#·.net·winforms
界面开发小八哥15 小时前
界面控件DevExpress WPF v26.1新版亮点 - TreeView、Spreadsheet控件功能升级
.net·wpf·界面控件·devexpress·ui开发
脚后跟法18 小时前
.NET热门ORM真实的性能测试总结
jvm·php·.net
无风听海1 天前
深入理解 .NET 中的 ToLowerInvariant:从字符串小写转换看文化敏感性陷阱
.net
娇气的红酒2 天前
关于.NET VS JavaEE平台争论的沉思录
java·java-ee·.net
单薄的衬衫2 天前
前一篇:详解 .NET 异步
.net
君无忧≈2 天前
.NET生态下Native AOT兼容的Cron任务调度框架
.net
步步为营DotNet2 天前
运用.NET Aspire 和 Native AOT 打造极致性能的云原生微服务
微服务·云原生·.net
꒰ঌ 安卓开发໒꒱2 天前
.NET CAP入门到入土
后端·c#·.net