在C#开发中,将对象转换为json字符串是数据交互场景下的基础操作,无论是接口返回数据、配置文件存储还是前后端数据传输,都经常需要用到这个功能。目前主流的实现方式有两种,分别是使用.NET框架自带的System.Text.Json库,以及使用第三方Newtonsoft.Json库,下面分别介绍两种方案的具体用法。

使用System.Text.Json实现对象转json
System.Text.Json是.NET Core 3.0之后内置的json处理库,不需要额外安装依赖,适合对性能要求较高、依赖项少的场景。基础的使用方式非常简单,只需要调用JsonSerializer.Serialize方法即可。
基础序列化示例
首先定义一个测试用的实体类:
using System;
namespace JsonDemo
{
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public DateTime CreateTime { get; set; }
}
}
然后编写序列化代码:
using System;
using System.Text.Json;
namespace JsonDemo
{
class Program
{
static void Main(string[] args)
{
// 创建测试对象
User user = new User
{
Id = 1,
Name = "张三",
Age = 25,
CreateTime = DateTime.Now
};
// 执行序列化
string jsonStr = JsonSerializer.Serialize(user);
Console.WriteLine(jsonStr);
}
}
}
常用配置说明
如果需要自定义序列化规则,比如格式化输出、忽略空值、自定义日期格式等,可以创建JsonSerializerOptions对象进行配置:
using System;
using System.Text.Json;
namespace JsonDemo
{
class Program
{
static void Main(string[] args)
{
User user = new User
{
Id = 1,
Name = "张三",
Age = 25,
CreateTime = DateTime.Now
};
// 配置序列化选项
JsonSerializerOptions options = new JsonSerializerOptions
{
// 格式化输出,方便阅读
WriteIndented = true,
// 忽略值为null的属性
DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull,
// 自定义日期格式
Converters = { new System.Text.Json.Serialization.JsonStringEnumConverter() }
};
// 带配置的序列化
string jsonStr = JsonSerializer.Serialize(user, options);
Console.WriteLine(jsonStr);
}
}
}
使用Newtonsoft.Json实现对象转json
Newtonsoft.Json(也叫Json.NET)是C#生态中非常流行的第三方json处理库,功能更丰富,兼容性更好,支持更多自定义配置,适合复杂序列化场景。使用前需要先通过NuGet安装Newtonsoft.Json包。
基础序列化示例
同样使用上面的User类,基础序列化代码如下:
using System;
using Newtonsoft.Json;
namespace JsonDemo
{
class Program
{
static void Main(string[] args)
{
User user = new User
{
Id = 1,
Name = "张三",
Age = 25,
CreateTime = DateTime.Now
};
// 执行序列化
string jsonStr = JsonConvert.SerializeObject(user);
Console.WriteLine(jsonStr);
}
}
}
常用配置说明
Newtonsoft.Json的配置通过JsonSerializerSettings实现,支持更多自定义规则:
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace JsonDemo
{
class Program
{
static void Main(string[] args)
{
User user = new User
{
Id = 1,
Name = "张三",
Age = 25,
CreateTime = DateTime.Now
};
// 配置序列化设置
JsonSerializerSettings settings = new JsonSerializerSettings
{
// 格式化输出
Formatting = Formatting.Indented,
// 忽略空值
NullValueHandling = NullValueHandling.Ignore,
// 日期格式设置为自定义字符串
DateFormatString = "yyyy-MM-dd HH:mm:ss",
// 枚举转换为字符串
Converters = { new StringEnumConverter() }
};
// 带配置的序列化
string jsonStr = JsonConvert.SerializeObject(user, settings);
Console.WriteLine(jsonStr);
}
}
}
两种方案的选择建议
如果是.NET Core 3.0及以上版本的项目,且序列化需求比较简单,优先选择System.Text.Json,不需要额外依赖,性能也更好。如果项目需要兼容旧版本.NET Framework,或者需要更复杂的序列化规则,比如循环引用处理、自定义契约解析等,推荐使用Newtonsoft.Json,功能更完善。
注意事项
- 序列化时如果对象包含循环引用,两个库默认都会抛出异常,需要配置对应的循环引用处理策略。
- 如果对象的属性有私有 setter,System.Text.Json默认不会序列化该属性,需要额外配置,而Newtonsoft.Json默认支持。
- 日期类型的序列化两个库的默认格式不同,实际使用时需要根据需求统一配置格式。
C#json序列化Newtonsoft_JsonSystem_Text_Json修改时间:2026-07-18 18:30:12