在C#开发中,处理JSON数据是常见需求,默认生成的JSON字符串往往是紧凑无格式的状态,没有缩进和换行,不利于人工阅读和调试。实现JSON字符串的美化格式输出,核心就是通过配置序列化参数,给JSON添加合理的缩进和换行规则。

使用System.Text.Json实现JSON美化
System.Text.Json是.NET Core 3.0之后内置的JSON处理库,不需要额外安装第三方包,通过配置JsonSerializerOptions的缩进相关属性即可实现美化输出。
核心配置参数
- WriteIndented:设置为true时,序列化时会自动添加缩进和换行
- IndentCharacter:指定缩进使用的字符,默认是空格
- IndentSize:指定缩进的大小,默认是2个字符
示例代码
以下是一个完整的示例,演示如何将对象序列化为美化后的JSON字符串:
using System;
using System.Text.Json;
namespace JsonFormatDemo
{
class Program
{
static void Main(string[] args)
{
// 创建测试对象
var testObj = new
{
Name = "测试数据",
Age = 25,
Hobbies = new[] { "阅读", "编程", "运动" },
Address = new
{
City = "北京",
Street = "测试路"
}
};
// 配置JSON序列化选项,开启缩进
var options = new JsonSerializerOptions
{
WriteIndented = true, // 开启缩进换行
IndentSize = 4 // 设置缩进大小为4个空格
};
// 序列化为美化后的JSON字符串
string formattedJson = JsonSerializer.Serialize(testObj, options);
// 输出结果
Console.WriteLine("美化后的JSON字符串:");
Console.WriteLine(formattedJson);
}
}
}
已有JSON字符串的处理方式
如果已经拿到的是紧凑格式的JSON字符串,想要美化它,可以先反序列化为对象,再按照上面的方式重新序列化:
using System;
using System.Text.Json;
namespace JsonFormatDemo
{
class Program
{
static void Main(string[] args)
{
// 紧凑格式的JSON字符串
string compactJson = "{"Name":"测试数据","Age":25,"Hobbies":["阅读","编程","运动"],"Address":{"City":"北京","Street":"测试路"}}";
// 反序列化为JsonDocument对象
using JsonDocument jsonDoc = JsonDocument.Parse(compactJson);
// 配置序列化选项
var options = new JsonSerializerOptions
{
WriteIndented = true
};
// 重新序列化为美化格式
string formattedJson = JsonSerializer.Serialize(jsonDoc, options);
Console.WriteLine("美化后的JSON字符串:");
Console.WriteLine(formattedJson);
}
}
}
使用Newtonsoft.Json实现JSON美化
Newtonsoft.Json(也叫Json.NET)是老牌的JSON处理库,很多旧项目还在使用,它提供了更灵活的格式化配置方式。
安装依赖
首先需要通过NuGet安装Newtonsoft.Json包,安装命令如下:
Install-Package Newtonsoft.Json
示例代码
使用Newtonsoft.Json美化JSON的核心是通过Formatting.Indented参数控制输出格式:
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace JsonFormatDemo
{
class Program
{
static void Main(string[] args)
{
// 方式1:直接序列化对象为美化JSON
var testObj = new
{
Name = "测试数据",
Age = 25,
Hobbies = new[] { "阅读", "编程", "运动" }
};
string formattedJson1 = JsonConvert.SerializeObject(testObj, Formatting.Indented);
Console.WriteLine("方式1美化结果:");
Console.WriteLine(formattedJson1);
// 方式2:将已有紧凑JSON字符串美化
string compactJson = "{"Name":"测试数据","Age":25,"Hobbies":["阅读","编程","运动"]}";
JObject jsonObject = JObject.Parse(compactJson);
string formattedJson2 = jsonObject.ToString(Formatting.Indented);
Console.WriteLine("方式2美化结果:");
Console.WriteLine(formattedJson2);
// 自定义缩进格式
JsonSerializerSettings settings = new JsonSerializerSettings
{
Formatting = Formatting.Indented,
// 可以自定义缩进字符和大小,默认是2个空格
};
string formattedJson3 = JsonConvert.SerializeObject(testObj, settings);
Console.WriteLine("自定义设置美化结果:");
Console.WriteLine(formattedJson3);
}
}
}
两种方式的对比
下面是两种常用JSON库的对比,开发者可以根据项目情况选择:
| 对比项 | System.Text.Json | Newtonsoft.Json |
|---|---|---|
| 依赖情况 | .NET Core 3.0+ 内置,无需额外安装 | 需要安装第三方NuGet包 |
| 性能 | 性能更高,是.NET官方推荐的JSON库 | 性能稍弱,但兼容性更好 |
| 配置灵活性 | 配置项相对简洁,满足基本格式化需求 | 提供更多自定义配置选项,适配复杂场景 |
| 适用场景 | 新项目、.NET Core及以上版本项目 | 旧项目、需要复杂JSON处理的项目 |
注意事项
- System.Text.Json在.NET Framework项目中无法直接使用,需要安装对应的兼容包,建议优先选择Newtonsoft.Json
- 美化JSON会增加字符串的长度,如果JSON数据量很大,需要评估对内存和传输的影响
- 如果只需要临时查看JSON格式,也可以使用在线JSON美化工具,但代码中处理还是推荐使用上述两种方式
C#JSON美化缩进换行JsonSerializerOptions修改时间:2026-06-15 10:00:35