C# System.Text.Json实现高效JSON序列化与反序列化

引言

在.NET生态中,JSON作为主流数据交换格式,其处理效率直接影响应用性能。自.NET Core 3.0引入System.Text.Json以来,开发者拥有了一个高性能、低内存分配的官方JSON解决方案。本文将深入解析其核心功能,助您掌握JSON处理的最佳实践。


一、基础用法快速入门

1.1 简单序列化示例

using System.Text.Json;

var person = new Person { Name = "Alice", Age = 30 };
string json = JsonSerializer.Serialize(person);
// 输出:{"Name":"Alice","Age":30}

1.2 反序列化操作

string json = @"{""Name"":""Bob"",""Age"":25}";
Person person = JsonSerializer.Deserialize<Person>(json);

二、高级配置技巧

2.1 自定义序列化选项

var options = new JsonSerializerOptions {
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,  // 驼峰命名
    WriteIndented = true,               // 美化输出
    IgnoreNullValues = true,            // 忽略空值
    NumberHandling = JsonNumberHandling.WriteAsString  // 数字序列化为字符串
};

2.2 处理特殊数据类型

日期格式化:

options.Converters.Add(new JsonStringEnumConverter()); // 枚举转字符串
options.DateHandling = JsonDateHandling.ISO8601;        // ISO 8601日期格式

三、性能优化策略

3.1 使用源码生成器(.NET 6+)

[JsonSerializable(typeof(Person))]
public partial class AppJsonContext : JsonSerializerContext {}

// 高性能序列化
JsonSerializer.Serialize(person, AppJsonContext.Default.Person);

3.2 内存优化技巧

  • 复用JsonSerializerOptions实例

  • 使用Utf8JsonWriter直接写入流

using var stream = new MemoryStream();
using var writer = new Utf8JsonWriter(stream);
JsonSerializer.Serialize(writer, person);

四、与Newtonsoft.Json对比

特性System.Text.JsonNewtonsoft.Json
性能⭐⭐⭐⭐⭐⭐⭐⭐
内存分配较高
功能丰富度基础功能高度扩展
依赖项.NET内置需安装NuGet包

迁移建议:对性能敏感场景优先使用System.Text.Json,复杂需求可结合两者使用


五、常见问题解决方案

5.1 循环引用处理

options.ReferenceHandler = ReferenceHandler.Preserve;

5.2 字段序列化

options.IncludeFields = true; // 包含公共字段

5.3 忽略属性

public class Person
{
    [JsonIgnore] // 忽略单个属性
    public int SecretCode { get; set; }
}

六、最佳实践总结

  1. 生产环境务必配置自定义JsonSerializerOptions

  2. 优先使用异步方法处理大文件

  3. 利用JsonDocument解析未知结构JSON

  4. 定期检查版本更新获取性能优化


结语

通过掌握System.Text.Json的核心用法与优化技巧,开发者可以在.NET应用中实现高效的JSON数据处理。随着.NET版本的迭代,该库将持续增强功能,建议关注官方更新日志获取最新特性。
扩展阅读微软官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xienda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值