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

C#中JSON序列化属性重命名详解(小白也能轻松掌握的实战教程)

在使用 C# 进行开发时,我们经常需要将对象转换为 JSON 格式(即 JSON 序列化),或者从 JSON 字符串还原为对象(反序列化)。然而,有时候类中的属性名与 JSON 中的字段名不一致,比如后端 API 要求字段名为 user_name,而我们的 C# 类属性却叫 UserName。这时,就需要对 JSON 序列化的属性进行重命名

C#中JSON序列化属性重命名详解(小白也能轻松掌握的实战教程) C# JSON序列化  属性重命名 Newtonsoft.Json System.Text.Json 第1张

本文将手把手教你如何在 C# 中实现 JSON 序列化属性重命名,涵盖两种主流库:Newtonsoft.JsonSystem.Text.Json(.NET Core 3.0+ 内置)。无论你是刚入门的新手,还是有一定经验的开发者,都能轻松掌握!

一、使用 Newtonsoft.Json 实现属性重命名

Newtonsoft.Json(也叫 Json.NET)是 .NET 平台上最流行的 JSON 处理库之一。它通过 [JsonProperty] 特性来指定序列化时使用的字段名。

using Newtonsoft.Json;public class User{    [JsonProperty("user_id")]    public int UserId { get; set; }    [JsonProperty("user_name")]    public string UserName { get; set; }    [JsonProperty("email_address")]    public string Email { get; set; }}// 序列化示例var user = new User{    UserId = 1001,    UserName = "张三",    Email = "zhangsan@example.com"};string json = JsonConvert.SerializeObject(user);Console.WriteLine(json);// 输出:{"user_id":1001,"user_name":"张三","email_address":"zhangsan@example.com"}

如上所示,即使 C# 属性名为 UserId,序列化后也会变成 user_id。这就是 C# JSON序列化 中最常用的属性重命名方式。

二、使用 System.Text.Json 实现属性重命名

从 .NET Core 3.0 开始,微软推出了内置的 System.Text.Json 库,性能更优且无需额外安装 NuGet 包。它使用 [JsonPropertyName] 特性来重命名属性。

using System.Text.Json;using System.Text.Json.Serialization;public class User{    [JsonPropertyName("user_id")]    public int UserId { get; set; }    [JsonPropertyName("user_name")]    public string UserName { get; set; }    [JsonPropertyName("email_address")]    public string Email { get; set; }}// 序列化示例var user = new User{    UserId = 1001,    UserName = "张三",    Email = "zhangsan@example.com"};string json = JsonSerializer.Serialize(user);Console.WriteLine(json);// 输出:{"user_id":1001,"user_name":"张三","email_address":"zhangsan@example.com"}

注意:两个库的特性名称不同,Newtonsoft.Json 用的是 JsonProperty,而 System.Text.Json 用的是 JsonPropertyName。别混淆哦!

三、如何选择?

  • 如果你的项目还在使用 .NET Framework 或较老的 .NET Core 版本,推荐使用 Newtonsoft.Json
  • 如果你使用的是 .NET 5 / .NET 6 / .NET 7 或更高版本,建议优先使用 System.Text.Json,因为它性能更好、内存占用更低。

四、常见问题解答

Q:能否同时支持两个库?

可以!但需分别添加两个特性:

[JsonProperty("user_name")][JsonPropertyName("user_name")]public string UserName { get; set; }

虽然略显冗余,但在迁移项目时非常实用。

总结

通过本文,你已经掌握了在 C# 中进行 JSON序列化属性重命名 的两种主流方法。无论是使用 Newtonsoft.Json 还是 System.Text.Json,只需一个简单的特性标注,就能轻松控制 JSON 字段名。这对于对接第三方 API、统一前后端命名规范等场景非常有用。

记住这四个关键词:C# JSON序列化属性重命名Newtonsoft.JsonSystem.Text.Json,它们是你解决此类问题的核心工具!

祝你编码愉快,轻松搞定 JSON!