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类来序列化和反序列化

实例操作
using System;
using System.Web.Script.Serialization;
 
public class Program
{
    public static void Main()
    {
        // 创建一个示例对象
        var person = new Person
        {
            Name = "张三",
            Age = 30
        };
 
        // 序列化对象到JSON字符串
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        string json = serializer.Serialize(person);
        Console.WriteLine(json);
 
        // 反序列化JSON字符串到对象
        string jsonString = "{\"Name\":\"李四\",\"Age\":25}";
        Person deserializedPerson = serializer.Deserialize<Person>(jsonString);
        Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
    }
}
 
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

二、使用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进行安装。

using Newtonsoft.Json;
 
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
 
Person person = new Person
{
    Name = "John Doe",
    Age = 30
};

// 序列化
string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);

// 反序列化
string data = "{\"Name\":\"李四\",\"Age\":25}";
person=JsonConvert.DeserializeObject<Person>(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进行安装。

using System;
using System.Text.Json;
 
namespace SerializeJsonExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个示例对象
            var person = new Person
            {
                Name = "张三",
                Age = 30,
            };
 
            // 使用JsonSerializer.Serialize方法将对象序列化为JSON字符串
            string jsonString = JsonSerializer.Serialize(person);
            Console.WriteLine(jsonString);
            // 输出:{"Name":"张三","Age":30}

            // 使用JsonSerializer.Deserialize方法将Json字符串反序列化为对象
            string data = "{\"Name\":\"李四\",\"Age\":25}";
            Person p = JsonSerializer.Deserialize<Person>(data)
        }
    }
 
    // 定义一个简单的Person类,用于序列化示例
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

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

// json在序列化的时候可以把Code序列化成服务器中相对应的code,
public class One
{
    [JsonPropertyName("code")]
    public string Code { get; set; }

    [JsonPropertyName("message")]
    public string Message { get; set; }
}

相关推荐

  1. Unity-序列序列

    2024-07-14 05:02:04       59 阅读
  2. 序列序列

    2024-07-14 05:02:04       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 05:02:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 05:02:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 05:02:04       58 阅读
  4. Python语言-面向对象

    2024-07-14 05:02:04       69 阅读

热门阅读

  1. 探索 `DatagramSocket` 类

    2024-07-14 05:02:04       32 阅读
  2. 5. 最长回文子串

    2024-07-14 05:02:04       25 阅读
  3. SQLServer设置端口

    2024-07-14 05:02:04       24 阅读
  4. webpack terser-webpack-plugin 不打包注释及log

    2024-07-14 05:02:04       26 阅读
  5. Cesium中创建局部坐标系

    2024-07-14 05:02:04       27 阅读
  6. PostgreSQL的pg_dirtyread工具

    2024-07-14 05:02:04       23 阅读
  7. 怎样把pptx课件转换成word文档

    2024-07-14 05:02:04       26 阅读
  8. Github 2024-07-13 Rust开源项目日报 Top10

    2024-07-14 05:02:04       25 阅读
  9. 设计模式详解(十八)——责任链模式

    2024-07-14 05:02:04       21 阅读
  10. Vue3 关于scss预编译中:deep 其中的deep如何理解

    2024-07-14 05:02:04       22 阅读
  11. stm32使用通用定时器生成pwm

    2024-07-14 05:02:04       26 阅读