本文将最常用的方式给你讲透 .NET Core 序列化,你马上就能用在 DTO、缓存、API 返回、Redis存储 里!
一、什么是序列化?(一句话)
序列化 = 把 对象 → 字符串/字节数组
反序列化 = 把 字符串/字节数组 → 对象
最常见场景:
- API 自动把对象转 JSON 返回给前端
- 把用户信息存缓存 / Redis(必须转字符串)
- 跨服务传输数据
二、.NET Core 默认自带:System.Text.Json
不需要装任何包,自带、高性能、官方推荐
1. 序列化(对象 → JSON)
using System.Text.Json;
// 定义对象
var user = new UserDto { Id = 1, UserName = "张三" };
// 序列化
string json = JsonSerializer.Serialize(user);
结果:
{"Id":1,"UserName":"张三"}
2. 反序列化(JSON → 对象)
// 把 JSON 转回对象
UserDto? user = JsonSerializer.Deserialize<UserDto>(json);
三、最常用配置(必看)
var options = new JsonSerializerOptions
{
// 1. 缩进格式化(好看)
WriteIndented = true,
// 2. 驼峰命名(userName)
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
// 3. 忽略空值字段
IgnoreNullValues = true,
// 4. 忽略大小写(反序列化时)
PropertyNameCaseInsensitive = true
};
// 使用
string json = JsonSerializer.Serialize(user, options);
四、3 个最常用 序列化特性(标签)
直接贴在类/字段上,控制序列化行为
public class UserDto
{
// 1. 字段重命名
[JsonPropertyName("userId")]
public int Id { get; set; }
// 2. 序列化时忽略该字段(不返回给前端)
[JsonIgnore]
public string Password { get; set; }
// 3. 必须有值
[JsonRequired]
public string UserName { get; set; }
}
五、企业级常用工具:Newtonsoft.Json (Json.NET)
很多老项目/第三方组件用这个,用法更简单
1. 安装
Install-Package Newtonsoft.Json
2. 序列化
string json = JsonConvert.SerializeObject(user);
3. 反序列化
var user = JsonConvert.DeserializeObject<UserDto>(json);
4. 特性
[JsonProperty("userId")] // 重命名
[JsonIgnore] // 忽略
[JsonRequired] // 必填
六、你现在马上能用的场景
场景 1:缓存用户信息
// 存缓存:对象 → JSON
string json = JsonSerializer.Serialize(user);
_cache.Set("user:1", json);
// 取缓存:JSON → 对象
string json = _cache.Get("user:1");
UserDto user = JsonSerializer.Deserialize<UserDto>(json);
场景 2:API 自动返回 JSON
什么都不用做 .NET Core 控制器会自动序列化
[HttpGet]
public UserDto Get()
{
return new UserDto { Id = 1, UserName = "张三" };
}
自动返回 JSON 给前端 ✅
七、两个序列化库怎么选?(超级简单)
- 新项目 / 官方推荐:
System.Text.Json - 老项目 / 兼容需要:
Newtonsoft.Json
功能 99% 一样!
八、超级总结(背会这 4 句)
- 序列化 = 对象转 JSON 字符串
- 反序列化 = JSON 字符串转对象
- 特性用来控制:忽略、重命名、必填
- .NET Core 自带,API/缓存/Redis 都靠它