C#怎么将对象序列化为JSON System.Text.Json使用方法

来源:这里教程网 时间:2026-02-21 17:33:46 作者:

System.Text.Json
将对象序列化为 JSON 很简单,核心是
JsonSerializer.Serialize()
方法,不需要额外安装包(.NET Core 3.0+ 和 .NET 5+ 内置)。

基础序列化:一行搞定

最常用场景:把一个普通类实例转成 JSON 字符串。

示例:

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

支持匿名类型、POCO 类、集合、基本类型等。默认使用驼峰命名(如

FirstName
firstName
),不加配置就自动优化。

控制序列化行为:用 JsonSerializerOptions

需要自定义格式时(比如保留 Pascal 命名、处理循环引用、忽略 null 值),传入

JsonSerializerOptions
实例。

常见设置:

保持属性原名:设置
PropertyNamingPolicy = null
忽略 null 值:设置
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
缩进输出(便于调试):设置
WriteIndented = true
允许注释和尾逗号(仅读取时有用):设置
ReadCommentHandling = JsonCommentHandling.Skip

示例:

var options = new JsonSerializerOptions
{
    WriteIndented = true,
    PropertyNamingPolicy = null,
    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
};
string json = JsonSerializer.Serialize(person, options);

序列化到流或文件,避免内存压力

大数据量或大对象时,别全加载到字符串里,直接写入

Stream
或文件更高效。

示例(写入文件):

using var stream = File.Create("data.json");
JsonSerializer.Serialize(stream, person, options);

也支持

Utf8JsonWriter
手动控制写入,适合构建动态 JSON 或高性能场景。

注意常见坑

这些情况容易报错或结果不符合预期:

不支持字段(field)序列化:只序列化 public 属性(property),字段需手动加
[JsonPropertyName]
并启用
IncludeFields = true
日期格式默认是 ISO 8601(如
"2023-05-10T08:30:00Z"
),要改格式需用
Converters
(如
JsonStringEnumConverter
或自定义
JsonConverter<datetime></datetime>
不支持循环引用:对象 A 引用 B,B 又引用 A → 默认抛异常;可配合
ReferenceHandler.Preserve
解决(.NET 6+)
字典 key 必须是 string:非 string key(如
Dictionary<int string></int>
)会失败,建议先转成
Dictionary<string string></string>
或用自定义 converter

基本上就这些。

相关推荐