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

相关推荐
心念枕惊16 小时前
OpenClaw.NET 重大更新:Goal 机制登场,让 AI Agent 不再“半途而废“
.net
geovindu17 小时前
CSharp:Chain of Responsibility Pattern
开发语言·后端·设计模式·c#·.net·责任链模式·行为模式
TDengine (老段)20 小时前
TDengine Node.js 与 C# 连接器 — Web 服务与 .NET 集成
大数据·数据库·node.js·c#·.net·时序数据库·tdengine
逻极2 天前
C# 从入门到精通:现代云原生与AI应用开发实战
ai·云原生·c#·.net
geovindu3 天前
CSharp: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·算法·c#·.net·搜索算法
海盗12343 天前
微软技术周报2026-07-27
microsoft·c#·.net
iReachers4 天前
.NET项目集成混淆加密:自动化保护DLL和EXE
.net·代码保护·自动构建·msbuild·c#混淆
完美火龙篇 四月的友4 天前
通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
.net·.netcore
柠檬香的4 天前
CsGrafeq: 比 Desmos 更“能折腾”的几何函数画板(.NET + Avalonia)
.net