C# JSON序列化与反序列化深度指南:从零开始掌握Json.NET与System.Text.Jso ...

打印 上一主题 下一主题

主题 651|帖子 651|积分 1953

一、Json.NET(Newtonsoft.Json)
1. 引入NuGet包
在项目中安装Json.NET库,可以通过NuGet Package Manager或下令行完成:
  1.  
复制代码
Bash
  1. dotnet add package Newtonsoft.Json
复制代码
2. 序列化
  1.  
复制代码
Csharp
  1. using Newtonsoft.Json;
  2. public class Person
  3. {
  4.     public string FirstName { get; set; }
  5.     public string LastName { get; set; }
  6. }
  7. public class JsonNetSerializationDemo
  8. {
  9.     public static void SerializePerson(Person person)
  10.     {
  11.         // 序列化为JSON字符串
  12.         string json = JsonConvert.SerializeObject(person, Formatting.Indented);
  13.         Console.WriteLine(json);
  14.     }
  15. }
  16. // 示例使用
  17. JsonNetSerializationDemo.SerializePerson(new Person { FirstName = "John", LastName = "Doe" });
复制代码
注释:使用JsonConvert.SerializeObject方法将Person对象序列化为格式化的JSON字符串。
3. 反序列化
  1.  
复制代码
Csharp
  1. public static Person DeserializePerson(string json)
  2. {
  3.     // 反序列化为Person对象
  4.     Person person = JsonConvert.DeserializeObject<Person>(json);
  5.     return person;
  6. }
  7. // 示例使用
  8. string inputJson = "{"FirstName":"Jane","LastName":"Smith"}";
  9. Person deserializedPerson = JsonNetSerializationDemo.DeserializePerson(inputJson);
复制代码
注释:使用JsonConvert.DeserializeObject方法将JSON字符串反序列化为Person对象。
二、System.Text.Json
1. 引入定名空间
无需额外安装NuGet包,直接引入System.Text.Json定名空间即可使用内置的JSON序列化/反序列化功能。
  1.  
复制代码
Csharp
  1. using System.Text.Json;
复制代码
2. 序列化
  1.  
复制代码
Csharp
  1. public static void SerializePerson(Person person)
  2. {
  3.     // 创建JsonSerializerOptions实例(可选,用于设置序列化选项)
  4.     JsonSerializerOptions options = new JsonSerializerOptions
  5.     {
  6.         WriteIndented = true // 生成格式化的JSON
  7.     };
  8.     // 序列化为JSON字符串
  9.     string json = JsonSerializer.Serialize(person, options);
  10.     Console.WriteLine(json);
  11. }
复制代码
注释:使用JsonSerializer.Serialize方法将Person对象序列化为格式化的JSON字符串,通过JsonSerializerOptions设置序列化选项。
3. 反序列化
  1.  
复制代码
Csharp
  1. public static Person DeserializePerson(string json)
  2. {
  3.     // 反序列化为Person对象
  4.     Person person = JsonSerializer.Deserialize<Person>(json);
  5.     return person;
  6. }
  7. // 示例使用
  8. string inputJson = "{"FirstName":"Jane","LastName":"Smith"}";
  9. 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以及其他平台上的支持情况。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表