C# 中处理 JSON 简介
JSON(JavaScript 对象表示法)是一种轻量级数据交换格式,广泛应用于现代 Web 应用、API 和配置文件中。对于 C# 开发者而言,掌握 JSON 处理能力是一项基本技能,尤其是在构建 REST 客户端、微服务或与外部数据源交互的应用时。
在 .NET 生态系统中,主要有两种 JSON 处理方式:经典的 Newtonsoft.Json 库(又称 Json.NET)和 .NET Core 3.0 引入、自 .NET 5+ 起成为标准的内置库 System.Text.Json。这两个库都能让你执行两项关键操作:序列化(将 C# 对象转换为 JSON 字符串)和 反序列化(将 JSON 字符串还原为 C# 对象)。
本文将深入探讨这两种方式,学习如何解析复杂的数据结构,并回顾在 C# 中处理 JSON 的最佳实践。
1. 基本操作:序列化与反序列化
1.1 使用 Newtonsoft.Json (Json.NET)
多年来,Newtonsoft.Json 一直是 .NET 中处理 JSON 的事实标准。开始之前,请通过 NuGet 安装该包:
Install-Package Newtonsoft.Json我们来看一个简单的示例类:
public class User{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public bool IsActive { get; set; }}将对象序列化为 JSON:
using Newtonsoft.Json;
User user = new User{ Id = 1, Name = "Ivan Petrov", Email = "ivan@example.com", IsActive = true};
string json = JsonConvert.SerializeObject(user, Formatting.Indented);Console.WriteLine(json);执行结果:
{ "Id": 1, "Name": "Ivan Petrov", "Email": "ivan@example.com", "IsActive": true}将 JSON 反序列化为对象:
string jsonString = @"{""Id"":1,""Name"":""Ivan Petrov"",""Email"":""ivan@example.com"",""IsActive"":true}";User deserializedUser = JsonConvert.DeserializeObject<User>(jsonString);Console.WriteLine($"User: {deserializedUser.Name}, Email: {deserializedUser.Email}");1.2 使用 System.Text.Json
自 .NET Core 3.0 起,微软引入了自己的 System.Text.Json 库,该库针对性能进行了优化,且无需外部依赖。
序列化:
using System.Text.Json;
User user = new User{ Id = 2, Name = "Maria Smirnova", Email = "maria@example.com", IsActive = false};
string json = JsonSerializer.Serialize(user, new JsonSerializerOptions { WriteIndented = true });Console.WriteLine(json);反序列化:
string jsonString = @"{""Id"":2,""Name"":""Maria Smirnova"",""Email"":""maria@example.com"",""IsActive"":false}";User deserializedUser = JsonSerializer.Deserialize<User>(jsonString);Console.WriteLine($"User: {deserializedUser.Name}");2. 处理复杂数据结构
2.1 嵌套对象与集合
JSON 常常包含嵌套结构。我们来看一个包含用户订单数组的示例:
public class Order{ public int OrderId { get; set; } public decimal Amount { get; set; } public List<string> Items { get; set; }}
public class Customer{ public int CustomerId { get; set; } public string FullName { get; set; } public List<Order> Orders { get; set; }}反序列化复杂 JSON