一、Json.NET(Newtonsoft.Json)
1. 引入NuGet包
在项目中安装Json.NET库,可以通过NuGet Package Manager或命令行完成:
Bash
dotnet add package Newtonsoft.Json
2. 序列化
Csharp
using Newtonsoft.Json;
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class JsonNetSerializationDemo
{
public static void SerializePerson(Person person)
{
// 序列化为JSON字符串
string json = JsonConvert.SerializeObject(person, Formatting.Indented);
Console.WriteLine(json);
}
}
// 示例使用
JsonNetSerializationDemo.SerializePerson(new Person { FirstName = "John", LastName = "Doe" });
注释:使用JsonConvert.SerializeObject
方法将Person
对象序列化为格式化的JSON字符串。
3. 反序列化
Csharp
public static Person DeserializePerson(string json)
{
// 反序列化为Person对象
Person person = JsonConvert.DeserializeObject<Person>(json);
return person;
}
// 示例使用
string inputJson = "{\"FirstName\":\"Jane\",\"LastName\":\"Smith\"}";
Person deserializedPerson = JsonNetSerializationDemo.DeserializePerson(inputJson);
注释:使用JsonConvert.DeserializeObject
方法将JSON字符串反序列化为Person
对象。
二、System.Text.Json
1. 引入命名空间
无需额外安装NuGet包,直接引入System.Text.Json
命名空间即可使用内置的JSON序列化/反序列化功能。
Csharp
using System.Text.Json;
2. 序列化
Csharp
public static void SerializePerson(Person person)
{
// 创建JsonSerializerOptions实例(可选,用于设置序列化选项)
JsonSerializerOptions options = new JsonSerializerOptions
{
WriteIndented = true // 生成格式化的JSON
};
// 序列化为JSON字符串
string json = JsonSerializer.Serialize(person, options);
Console.WriteLine(json);
}
注释:使用JsonSerializer.Serialize
方法将Person
对象序列化为格式化的JSON字符串,通过JsonSerializerOptions
设置序列化选项。
3. 反序列化
Csharp
public static Person DeserializePerson(string json)
{
// 反序列化为Person对象
Person person = JsonSerializer.Deserialize<Person>(json);
return person;
}
// 示例使用
string inputJson = "{\"FirstName\":\"Jane\",\"LastName\":\"Smith\"}";
Person deserializedPerson = JsonNetSerializationDemo.DeserializePerson(inputJson);
注释:使用JsonSerializer.Deserialize
方法将JSON字符串反序列化为Person
对象。
三、特性与定制
-
Json.NET:
- 使用
[JsonProperty]
属性控制序列化时的属性名称、顺序等。 - 支持自定义序列化器与转换器。
- 使用
-
System.Text.Json:
- 使用
[JsonPropertyName]
属性控制序列化时的属性名称。 - 使用
JsonConverter<T>
实现自定义转换器。 - 支持
JsonSerializerOptions
中设置全局或类型的序列化行为。
- 使用
四、性能对比
- System.Text.Json通常比Json.NET更快,尤其是在大规模数据和高并发场景下,因为它更侧重于性能优化。
- Json.NET功能更丰富,支持更多的自定义选项和复杂场景,但可能牺牲一定的性能。
五、总结
本文从零开始,详细介绍了C#中两种流行的JSON序列化与反序列化库——Json.NET和System.Text.Json的使用方法。通过创建对象、引入库或命名空间、编写序列化与反序列化代码,展示了如何使用这两种库将对象转换为JSON字符串,以及将JSON字符串还原为对象。每个示例均包含详尽的注释,解释了代码的工作原理和使用场景。通过这些内容,您应已全面理解如何在C#中使用Json.NET和System.Text.Json进行JSON序列化与反序列化,并了解了它们各自的特性和适用场景。结合文中提供的代码示例与注释,您可以根据项目需求选择合适的库进行JSON数据处理,并为进一步探索其高级功能打下坚实基础。
六、进阶话题
- Json.NET高级特性:如条件忽略、循环引用处理、ISerializable支持等。
- System.Text.Json高级特性:如非托管堆栈缓冲区、UTF8编码优化、流式读写等。
- 序列化性能基准测试:对比不同库在特定场景下的性能差异。
- 跨平台兼容性:探讨两种库在.NET Core、.NET Framework以及其他平台上的支持情况。