0

0

C# JSON序列化与反序列化 - System.Text.Json与Newtonsoft.Json对比

月夜之吻

月夜之吻

发布时间:2025-12-24 14:47:53

|

316人浏览过

|

来源于php中文网

原创

System.Text.Json性能更高、更省内存,适合高性能场景;Newtonsoft.Json功能更丰富、兼容性更好,适合复杂定制需求;新项目推荐System.Text.Json,旧项目可继续使用Newtonsoft.Json。

c# json序列化与反序列化 - system.text.json与newtonsoft.json对比

在C#开发中,处理JSON数据是常见需求,尤其是在Web API、配置读取和跨服务通信场景下。目前主流的两个JSON库是 System.Text.JsonNewtonsoft.Json(又称Json.NET)。两者都能完成序列化与反序列化任务,但在性能、功能、兼容性和使用方式上存在差异。

1. 性能对比:System.Text.Json 更快更省内存

System.Text.Json 是 .NET Core 3.0 引入的原生 JSON 库,由微软团队专门优化,底层基于 Span 和只读字符序列,避免频繁分配内存,因此在大多数场景下比 Newtonsoft.Json 更快。

  • 序列化大型对象时,System.Text.Json 通常有更高的吞吐量
  • 反序列化字符串或流数据时,内存分配更少,GC 压力更低
  • 尤其适合高性能 Web API 返回 JSON 响应的场景

如果你追求极致性能且不需要复杂功能,优先选择 System.Text.Json。

2. 功能丰富度:Newtonsoft.Json 更灵活强大

Newtonsoft.Json 发布多年,生态成熟,支持更多高级特性:

  • 支持字段、私有成员、动态类型(JObjectJArray)操作
  • 丰富的属性控制:如条件序列化(ShouldSerializeXXX)、自定义转换器(JsonConverter)粒度更细
  • 支持 LINQ to JSON,可在运行时查询和修改 JSON 结构
  • 更好的错误处理机制和调试支持
  • 兼容老版本 .NET Framework,适合旧项目维护

对于需要深度定制序列化行为、处理非标准 JSON 或与第三方接口对接的复杂场景,Newtonsoft.Json 仍是首选。

3. 使用方式对比:API 设计风格不同

两者基本用法相似,但命名和配置方式略有区别

System.Text.Json 示例:

Opus
Opus

AI生成视频工具

下载
var options = new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    WriteIndented = true
};
var json = JsonSerializer.Serialize(person, options);
var personObj = JsonSerializer.Deserialize(json, options);

Newtonsoft.Json 示例:

var settings = new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver(),
    Formatting = Formatting.Indented
};
var json = JsonConvert.SerializeObject(person, settings);
var personObj = JsonConvert.DeserializeObject(json, settings);

注意:默认情况下,System.Text.Json 只序列化 public 属性,不支持字段;而 Newtonsoft.Json 可通过特性或设置控制字段访问级别。

4. 兼容性与迁移建议

从 .NET 5 开始,ASP.NET Core 默认使用 System.Text.Json 作为后台序列化引擎。但如果你的项目依赖以下情况,可能仍需保留 Newtonsoft.Json:

  • 使用了大量自定义 JsonConverter
  • 需要反序列化包含类型信息的 JSON(如 "$type" 字段)
  • 依赖 JsonPropertyAttribute 的高级选项(如命名映射、默认值处理等)
  • 正在维护旧系统且迁移成本高

好消息是,Microsoft 提供了 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包,允许在 ASP.NET Core 中继续使用 Newtonsoft.Json 作为 MVC 的序列化器。

基本上就这些。选择哪个库取决于你的具体需求:要性能和现代性选 System.Text.Json,要灵活性和兼容性选 Newtonsoft.Json。现在很多新项目采用 System.Text.Json 为主,必要时通过中间层兼容旧逻辑。不复杂但容易忽略的是日期格式、null 处理和循环引用这些细节,不同库默认行为不一样,需显式配置以避免意外。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

400

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

528

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

305

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

67

2025.09.10

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

226

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

428

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

246

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

202

2023.09.04

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MongoDB 教程
MongoDB 教程

共17课时 | 1.5万人学习

C# 教程
C# 教程

共94课时 | 5.2万人学习

C 教程
C 教程

共75课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号