C# 中的 JSON 序列化与反序列化:使用 Newtonsoft.Json 和 System.Text.Json
在 C# 中,JSON 序列化和反序列化是处理数据交换和持久化的常用技术。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。本文将介绍如何在 C# 中使用两种流行的库:Newtonsoft.Json 和 System.Text.Json,来实现 JSON 的序列化和反序列化。
1. 使用 Newtonsoft.Json
Newtonsoft.Json(也称为 Json.NET)是一个非常流行的 JSON 框架,提供了强大的功能和灵活性。安装 Newtonsoft.Json
在 Visual Studio 中,可以通过 NuGet 包管理器安装 Newtonsoft.Json:bash复制Install-Package Newtonsoft.Json
JSON 序列化
将 C# 对象转换为 JSON 字符串:csharp复制using Newtonsoft.Json;public class Skill{
public int ID { get; set; }
public string Name { get; set; }
public int Damage { get; set; }}var mySkill = new Skill { ID = 1, Name = "Fireball", Damage = 50 };string json = JsonConvert.SerializeObject(mySkill);Console.WriteLine(json);JSON 反序列化
将 JSON 字符串转换回 C# 对象:csharp复制string jsonString = "{\"ID\":1,\"Name\":\"Fireball\",\"Damage\":50}";Skill deserializedSkill = JsonConvert.DeserializeObject<Skill>(jsonString);Console.WriteLine(deserializedSkill.Name);注意事项
- 类中的属性名称必须与 JSON 键对应,否则在默认情况下无法正确映射。
- 可以通过数据注解来自定义序列化和反序列化的行为,比如忽略某些属性、改变键名等。
2. 使用 System.Text.Json
System.Text.Json 是 .NET Core 3.0 及更高版本中引入的高性能 JSON 库。JSON 序列化
将 C# 对象转换为 JSON 字符串:csharp复制using System.Text.Json;public class Person{
public string Name { get; set; }
public int Age { get; set; }}var person = new Person { Name = "Alice", Age = 30 };string json = JsonSerializer.Serialize(person);Console.WriteLine(json);JSON 反序列化
将 JSON 字符串转换回 C# 对象:csharp复制string jsonString = "{\"Name\":\"Alice\",\"Age\":30}";Person deserializedPerson = JsonSerializer.Deserialize<Person>(jsonString);Console.WriteLine(deserializedPerson.Name);自定义序列化和反序列化
System.Text.Json 提供了强大的自定义功能。例如,可以通过JsonSerializerOptions 来配置序列化和反序列化的行为。3. 示例:处理复杂 JSON 数据
假设有以下 JSON 数据:JSON复制{
"success": true,
"msg": "获取成功",
"data": [
{ "id": 0, "Name": "is C#", "Number": "A-001", "Date": "2019-08-02" },
{ "id": 1, "Name": "is Golang", "Number": "A-002", "Date": "2019-08-03" }
]}可以定义对应的 C# 类:csharp复制public class Message{
public bool success { get; set; }
public string msg { get; set; }
public List<Datas> data { get; set; }}public class Datas{
public int id { get; set; }
public string Name { get; set; }
public string Number { get; set; }
public string Date { get; set; }}然后使用 Newtonsoft.Json 或 System.Text.Json 进行反序列化:csharp复制string jsonString = File.ReadAllText("data.json");Message message = JsonConvert.DeserializeObject<Message>(jsonString);Console.WriteLine(message.msg);4. 性能比较
- Newtonsoft.Json:功能丰富,支持复杂的自定义行为,但在性能上可能不如 System.Text.Json。
- System.Text.Json:性能优化,适合高性能场景,但自定义功能相对有限。

