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 小时前
用 Inno Setup 把 .NET 程序打包成安装包:从零到发布的完整指南
.net·inno setup·码农刚子·.net 程序打包·安装脚本编写
界面开发小八哥10 小时前
界面控件DevExpress Blazor v26.1新版亮点 - TreeList & 数据编辑器
javascript·编辑器·.net·界面控件·blazor·devexpress·用户界面
rockey62720 小时前
C#脚本引擎之AScript与Flee对比
c#·.net·script·eval·动态脚本
海盗12341 天前
微软技术周报 · 2026-08-11~2026-08-18
人工智能·microsoft·.net
Leinwin1 天前
微软MAI-Code-1.1-Flash技术解读:Token效率提升25%,CLI与.NET全面升级
microsoft·.net
慧都小妮子2 天前
C# 实现AI合同审查:从读取、风险标注到批量签发
ai·自然语言处理·c#·.net·办公自动化·ai合同审查·文档ai代理
唐青枫5 天前
别把 ImmutableArray 当成只读 List:C#.NET 不可变数组深入详解
c#·.net
微小冷6 天前
海康威视相机C#二次开发环境配置
数码相机·c#·.net·海康威视·相机开发
唐青枫6 天前
别只会解析参数:C#.NET Spectre.Console.Cli 命令行工具实战详解
c#·.net
rockey6277 天前
基于AScript的Lua脚本语言发布啦
c#·.net·lua·script·动态脚本