引言
JSON(JavaScript 对象表示法)是一种轻量级的数据交换格式,已成为服务器与客户端之间交互以及存储配置的事实标准。在 C# (.NET) 生态系统中,JSON 操作得到了最高级别的支持:开发者既可以使用内置库,也可以使用强大的第三方解决方案。在本文中,我们将通过实际示例,讲解如何使用现代方法在 C# 中执行 JSON 的解析、序列化和反序列化。
我们将介绍两个主要工具:System.Text.Json(自 .NET Core 3.0+ 起的内置库)和 Newtonsoft.Json(流行的第三方库)。您将学习如何将 C# 对象转换为 JSON 以及反向转换,如何处理嵌套结构,以及如何处理错误。
C# 中序列化与反序列化的基础
在深入代码之前,我们先明确术语。序列化是将 C# 对象(例如类的实例)转换为 JSON 字符串的过程。反序列化是反向过程:从 JSON 字符串中恢复 C# 对象。在 C# 中,这通过属性和专门的序列化器类来实现。
1. 使用 System.Text.Json(内置库)
从 .NET Core 3.0 开始,微软推出了自己的 JSON 操作库——System.Text.Json。它比 Newtonsoft.Json 更快,并且无需安装额外的包。
考虑一个简单的 Person 类:
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}序列化为 JSON:
using System.Text.Json;
var person = new Person{ Name = "阿列克谢", Age = 30, Email = "alex@example.com"};
string json = JsonSerializer.Serialize(person);Console.WriteLine(json);// 输出:{"Name":"阿列克谢","Age":30,"Email":"alex@example.com"}从 JSON 反序列化:
string jsonString = @"{""Name"":""玛丽亚"",""Age"":25,""Email"":""maria@example.com""}";Person? person = JsonSerializer.Deserialize<Person>(jsonString);Console.WriteLine(person?.Name); // 玛丽亚请注意 ?(可为空)运算符——反序列化在出错时可能返回 null。
2. 使用 Newtonsoft.Json (Json.NET)
尽管 System.Text.Json 已经出现,Newtonsoft.Json 因其灵活性和广泛的配置能力仍然是热门选择。要使用它,请安装 NuGet 包 Newtonsoft.Json。
使用相同的 Person 类示例:
using Newtonsoft.Json;
// 序列化var person = new Person { Name = "伊万", Age = 35, Email = "ivan@example.com" };string json = JsonConvert.SerializeObject(person);Console.WriteLine(json);
// 反序列化string jsonInput = @"{'Name':'奥尔加','Age':28,'Email':'olga@example.com'}";Person? personDeserialized = JsonConvert.DeserializeObject<Person>(jsonInput);Console.WriteLine(personDeserialized?.Name); // 奥尔加Newtonsoft.Json 默认支持双引号和单引号,使其对“脏” JSON 更加宽容。
进阶场景:处理嵌套对象和集合
在实际项目中,JSON 很少是扁平的。我们来看一个包含嵌套数据的示例。
假设我们有一个 Company 类,其中包含一个员工列表:
public class Employee{ public string Name { get; set; } public string Position { get; set; }}
public class Company{ public string CompanyName { get; set; } public List<Employee> Employees { get; set; }}序列化(System.Text.Json):
博客
书籍推荐
推荐阅读