C# JSON序列化与反序列化深度指南:从零开始掌握Json.NET与System.Text.Json实践与对比
创始人
2025-01-16 02:05:06
0

一、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(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(json);     return person; }  // 示例使用 string inputJson = "{\"FirstName\":\"Jane\",\"LastName\":\"Smith\"}"; Person deserializedPerson = JsonNetSerializationDemo.DeserializePerson(inputJson);

注释:使用JsonSerializer.Deserialize方法将JSON字符串反序列化为Person对象。

三、特性与定制

  1. Json.NET

    • 使用[JsonProperty]属性控制序列化时的属性名称、顺序等。
    • 支持自定义序列化器与转换器。
  2. System.Text.Json

    • 使用[JsonPropertyName]属性控制序列化时的属性名称。
    • 使用JsonConverter实现自定义转换器。
    • 支持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以及其他平台上的支持情况。

 

相关内容

热门资讯

绝活儿辅助!广西老友玩老是输怎... 绝活儿辅助!广西老友玩老是输怎么办(辅助挂)都是真的有辅助app(讲解有挂)在进入广西老友玩老是输怎...
法门辅助!福建13水插件(辅助... 法门辅助!福建13水插件(辅助挂)一贯是有辅助技巧(有挂技术)1、许多玩家不知道福建13水插件辅助怎...
办法辅助!潮友会app下载官方... 办法辅助!潮友会app下载官方辅助器(辅助挂)真是真的是有辅助app(有挂教程)该软件可以轻松地帮助...
妙招辅助!邯郸胡乐挂辅助(辅助... 妙招辅助!邯郸胡乐挂辅助(辅助挂)好像存在有辅助插件(有挂方略)1、上手简单,内置详细流程视频教学,...
教程书辅助!乐酷辅助(辅助挂)... 教程书辅助!乐酷辅助(辅助挂)其实存在有辅助脚本(有挂细节)乐酷辅助能透视中分为三种模型:乐酷辅助模...
学习辅助!决战卡五星辅助(辅助... 学习辅助!决战卡五星辅助(辅助挂)本来真的是有辅助软件(有人有挂)学习辅助!决战卡五星辅助(辅助挂)...
绝活辅助!边锋嘉兴麻将辅助器(... 绝活辅助!边锋嘉兴麻将辅助器(辅助挂)真是真的有辅助神器(新版有挂)1、边锋嘉兴麻将辅助器公共底牌简...
举措辅助!枫叶辅助器(辅助挂)... 举措辅助!枫叶辅助器(辅助挂)本来存在有辅助技巧(竟然有挂)1、下载好枫叶辅助器正确养号方法之后点击...
讲义辅助!点我达辅助(辅助挂)... 讲义辅助!点我达辅助(辅助挂)一直存在有辅助技巧(有人有挂)1、点我达辅助辅助器安装包、点我达辅助辅...
模块辅助!威信茶馆有挂的吗(辅... 模块辅助!威信茶馆有挂的吗(辅助挂)一直真的是有辅助脚本(揭秘有挂)1、玩家可以在威信茶馆有挂的吗线...