• C#—Json序列化和反序列化


    C#—Json序列化和反序列化

    在C#中,可以使用System.Web.Script.Serialization.JavaScriptSerializer类来序列化和反序列化JSON数据

    可以使用Newtonsoft.Json库进行JSON的序列化。

    可以使用.NET内置的System.Text.Json库来进行JSON的序列化。

    json文件格式

    [ { Name:"za",Age:10} { Name:"zs",Age:11} ]

    一、使用JavaScriptSerializer类来序列化和反序列化

    实例操作
    1. using System;
    2. using System.Web.Script.Serialization;
    3. public class Program
    4. {
    5. public static void Main()
    6. {
    7. // 创建一个示例对象
    8. var person = new Person
    9. {
    10. Name = "张三",
    11. Age = 30
    12. };
    13. // 序列化对象到JSON字符串
    14. JavaScriptSerializer serializer = new JavaScriptSerializer();
    15. string json = serializer.Serialize(person);
    16. Console.WriteLine(json);
    17. // 反序列化JSON字符串到对象
    18. string jsonString = "{\"Name\":\"李四\",\"Age\":25}";
    19. Person deserializedPerson = serializer.Deserialize(jsonString);
    20. Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
    21. }
    22. }
    23. public class Person
    24. {
    25. public string Name { get; set; }
    26. public int Age { get; set; }
    27. }

    二、使用Newtonsoft.Json库进行JSON的序列化。

    本方法采用的是第三方类库实现json序列化,Newtonsoft.Json(JSON.ENT)包;(本第三方支持弱类型转换)

    Newtonsoft.Json 相比于 System.Text.Json,具有以下优势和特点

    (1)使用广泛 多年来已经存在并广泛使用,Newtonsoft.Json 是一个成熟的第三方库,在 .NET 社区中被广泛接受和使用。它拥有丰富的功能和强大的灵活性,已经在许多项目中得到验证。

    (2)功能丰富 更丰富的功能,Newtonsoft.Json 提供了一些更高级的功能,如完全自定义的序列化和反序列化逻辑,包括对循环引用的处理、自定义转换器、忽略属性等等。它可以方便地处理一些复杂的 JSON 数据场景。

    (3)支持若类型转换的特点

    实例操作

    首先,需要安装Newtonsoft.Json包,可以通过NuGet进行安装。

    1. using Newtonsoft.Json;
    2. public class Person
    3. {
    4. public string Name { get; set; }
    5. public int Age { get; set; }
    6. }
    7. Person person = new Person
    8. {
    9. Name = "John Doe",
    10. Age = 30
    11. };
    12. // 序列化
    13. string json = JsonConvert.SerializeObject(person);
    14. Console.WriteLine(json);
    15. // 反序列化
    16. string data = "{\"Name\":\"李四\",\"Age\":25}";
    17. person=JsonConvert.DeserializeObject(data);

    三、使用.NET内置的System.Text.Json库来进行JSON的序列化

    System.Text.Json 相比于 Newtonsoft.Json,具有以下优势和特点

    (1)性能 System.Text.Json 在性能方面进行了优化,通常比 Newtonsoft.Json 更快。它利用了新的读写 API,采用更高效的内部实现,以提供更好的性能和内存利用率。

    (2)属于 .NET Core System.Text.Json 是 .NET Core 的一部分,因此在创建跨平台应用程序时,不需要额外的依赖项。这使得在 .NET Core 平台上使用它更加方便。

    (3)简单场景 System.Text.Json 提供了一些简化的 API,使得在处理简单的 JSON 数据时更容易操作。 例如,可以直接通过 JsonSerializer.Deserialize() 方法进行快速的反序列化,而无需像在 Newtonsoft.Json 中那样使用 JsonConvert.DeserializeObject()。

    (4)默认是强类型转换,比如:实体类定义的是字符串,json字符串返回的是整型,转换时会报错

    实例操作

    首先,需要安装System.Text.Json包,可以通过NuGet进行安装。

    1. using System;
    2. using System.Text.Json;
    3. namespace SerializeJsonExample
    4. {
    5. class Program
    6. {
    7. static void Main(string[] args)
    8. {
    9. // 创建一个示例对象
    10. var person = new Person
    11. {
    12. Name = "张三",
    13. Age = 30,
    14. };
    15. // 使用JsonSerializer.Serialize方法将对象序列化为JSON字符串
    16. string jsonString = JsonSerializer.Serialize(person);
    17. Console.WriteLine(jsonString);
    18. // 输出:{"Name":"张三","Age":30}
    19. // 使用JsonSerializer.Deserialize方法将Json字符串反序列化为对象
    20. string data = "{\"Name\":\"李四\",\"Age\":25}";
    21. Person p = JsonSerializer.Deserialize(data)
    22. }
    23. }
    24. // 定义一个简单的Person类,用于序列化示例
    25. public class Person
    26. {
    27. public string Name { get; set; }
    28. public int Age { get; set; }
    29. }
    30. }

    System.Text.Json包可以在模型类中进行指定数据

    1. // json在序列化的时候可以把Code序列化成服务器中相对应的code,
    2. public class One
    3. {
    4. [JsonPropertyName("code")]
    5. public string Code { get; set; }
    6. [JsonPropertyName("message")]
    7. public string Message { get; set; }
    8. }

  • 相关阅读:
    云原生实战课大纲
    RabbitMQ-基本概念/环境配置
    「游戏引擎 浅入浅出」4.1 Unity Shader和OpenGL Shader
    上周热点回顾(8.21-8.27)
    时间复杂度与空间复杂度
    dreamweaver作业静态HTML网页设计——摩尔庄园7页HTML+CSS+JS DW大学生网页作业制作设计 Dreamweaver简单网页
    024. 解压报文[200 分]
    14条最佳JavaScript代码编写技巧
    十四天学会C++之第五天:类的详细讨论
    模板模式+策略模式优化
  • 原文地址:https://blog.csdn.net/qq_3517289697/article/details/140314628