JSON 处理在 C# (.NET) 中:完整指南与示例
JSON (JavaScript Object Notation) 是现代 Web 应用程序、API 和配置文件中数据交换最流行的格式之一。在 .NET 生态系统中,开发人员可以使用强大的工具来处理 JSON,这些工具可以轻松地将对象序列化为 JSON 并反序列化回来。在本文中,我们将详细介绍两种主要方法:内置库 System.Text.Json(推荐用于 .NET Core 3.0+ 和 .NET 5+)和流行的第三方库 Newtonsoft.Json(也称为 Json.NET)。
1. System.Text.Json — 现代 .NET 标准
从 .NET Core 3.0 开始,Microsoft 推出了自己的高性能 JSON 处理库 — System.Text.Json。它针对最小内存消耗和高速度进行了优化,使其成为新项目的理想选择。
1.1. 安装与导入
该库已内置于 .NET 5/6/7/8/9 中,因此无需额外安装。要使用它,只需引入命名空间:
using System.Text.Json;using System.Text.Json.Serialization;1.2. 基本序列化与反序列化
让我们看一个简单的例子:将对象序列化为 JSON 并反序列化回来。
// 定义类public class Person{ public string Name { get; set; } public int Age { get; set; } public bool IsEmployed { get; set; }}
// 序列化var person = new Person { Name = "伊万", Age = 30, IsEmployed = true };string json = JsonSerializer.Serialize(person);Console.WriteLine(json); // {"Name":"伊万","Age":30,"IsEmployed":true}
// 反序列化var deserializedPerson = JsonSerializer.Deserialize<Person>(json);Console.WriteLine(deserializedPerson.Name); // 伊万1.3. 使用属性
System.Text.Json 支持用于微调序列化的属性:
public class Product{ [JsonPropertyName("product_id")] public int Id { get; set; } [JsonIgnore] public string InternalCode { get; set; } [JsonConverter(typeof(JsonStringEnumConverter))] public ProductCategory Category { get; set; }}
public enum ProductCategory{ Electronics, Clothing, Food}
var product = new Product { Id = 101, InternalCode = "SECRET", Category = ProductCategory.Electronics };
string json = JsonSerializer.Serialize(product);// {"product_id":101,"Category":"Electronics"}// InternalCode 由于 [JsonIgnore] 而未包含在 JSON 中1.4. 序列化选项
您可以通过 JsonSerializerOptions 配置序列化器的行为:
var options = new JsonSerializerOptions{ WriteIndented = true, // 带缩进的漂亮输出 PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // 属性的 camelCase DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull // 忽略 null};
string prettyJson = JsonSerializer.Serialize(person, options);Console.WriteLine(prettyJson);/* 输出:{ "name": "伊万", "age": 30, "isEmployed": true}*/2. Newtonsoft.Json (Json.NET) — 久经考验的工具
在 System.Text.Json 出现之前,Newtonsoft.Json 是 .NET 中处理 JSON 的事实标准。它提供更灵活的配置和广泛的功能集,尽管在性能上有所不足。
2.1. 安装
要使用 Newtonsoft.Json,需要安装 NuGet 包:
// 通过 Package Manager Console:Install-Package Newtonsoft.Json
// 或通过 .NET CLI:dotnet add package Newtonsoft.Json2.2. 基本操作
using Newtonsoft.Json;
public class Or