当前位置:首页 > C# > 正文

掌握C#中的JSON序列化(System.Text.Json序列化配置详解)

在现代C#开发中,处理JSON数据是家常便饭。无论是Web API、微服务通信还是配置文件读写,都离不开JSON的序列化与反序列化。从.NET Core 3.0开始,微软推出了高性能的 System.Text.Json 库,用以替代第三方库如Newtonsoft.Json(Json.NET)。本文将手把手教你如何使用 System.Text.Json 进行灵活、高效的 JSON序列化配置,即使你是编程小白也能轻松上手!

掌握C#中的JSON序列化(System.Text.Json序列化配置详解) System.Text.Json序列化配置 System.Text.Json教程 C# JSON序列化 JsonSerializerOptions设置 第1张

什么是 System.Text.Json?

System.Text.Json 是 .NET 提供的内置 JSON 处理库,具有高性能、低内存占用、安全默认值等优点。它通过 JsonSerializer 类提供序列化(对象 → JSON)和反序列化(JSON → 对象)功能。

基础用法:快速上手

先来看一个最简单的例子:

using System;using System.Text.Json;public class Person{    public string Name { get; set; }    public int Age { get; set; }}class Program{    static void Main()    {        var person = new Person { Name = "张三", Age = 28 };        string json = JsonSerializer.Serialize(person);        Console.WriteLine(json); // 输出:{"Name":"张三","Age":28}    }}

默认情况下,属性名会保持原样(PascalCase),但很多前端框架习惯使用 camelCase(小驼峰)。这时就需要用到 JsonSerializerOptions 来进行自定义配置。

核心配置项:JsonSerializerOptions

JsonSerializerOptionsSystem.Text.Json 的核心配置类,几乎所有自定义行为都通过它实现。下面介绍几个常用配置项:

1. 属性命名策略(PropertyNamingPolicy)

将 C# 的 PascalCase 转为 JSON 的 camelCase:

var options = new JsonSerializerOptions{    PropertyNamingPolicy = JsonNamingPolicy.CamelCase};string json = JsonSerializer.Serialize(person, options);// 输出:{"name":"张三","age":28}

2. 格式化输出(WriteIndented)

让 JSON 更易读(适合调试):

var options = new JsonSerializerOptions{    WriteIndented = true};string json = JsonSerializer.Serialize(person, options);/* 输出:{  "Name": "张三",  "Age": 28} */

3. 忽略空值(DefaultIgnoreCondition)

避免序列化 null 或默认值字段:

var options = new JsonSerializerOptions{    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull};var person = new Person { Name = "李四" }; // Age 默认为 0string json = JsonSerializer.Serialize(person, options);// 输出:{"Name":"李四"} (Age 被忽略)

4. 处理日期格式(Converters)

System.Text.Json 默认使用 ISO 8601 格式(如 2023-10-01T12:00:00Z),但有时你需要自定义格式:

var options = new JsonSerializerOptions();options.Converters.Add(new JsonStringEnumConverter()); // 枚举转字符串options.Converters.Add(new CustomDateTimeConverter("yyyy-MM-dd HH:mm:ss")); // 自定义日期转换器// 注意:需自行实现 CustomDateTimeConverter 或使用第三方库

全局配置建议(ASP.NET Core 中)

在 ASP.NET Core 项目中,你通常会在 Program.cs 中统一配置 JSON 行为:

var builder = WebApplication.CreateBuilder(args);builder.Services.ConfigureHttpJsonOptions(options =>{    options.SerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;    options.SerializerOptions.WriteIndented = false;    options.SerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;});// 或者针对 MVCbuilder.Services.Configure(options =>{    options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;});

常见问题与技巧

  • 中文乱码? 确保使用 UTF-8 编码,System.Text.Json 默认支持 Unicode。
  • 不支持私有字段? 默认只序列化公共属性,可通过 [JsonInclude] 特性或自定义转换器实现。
  • 性能优化? 避免在循环中重复创建 JsonSerializerOptions,应作为静态只读字段复用。

总结

通过合理使用 JsonSerializerOptions,你可以完全掌控 System.Text.Json 的序列化行为。无论你是需要调整命名风格、美化输出格式,还是忽略空值、自定义类型转换,都能轻松实现。掌握这些 C# JSON序列化 技巧,将极大提升你的开发效率和代码质量。

希望这篇 System.Text.Json教程 能帮助你快速上手!记得在实际项目中根据需求灵活组合各种 JsonSerializerOptions设置,打造高效、可维护的 JSON 处理逻辑。