当前位置:首页 > 行业动态 > 正文

C# Json反序列化

csharp,using Newtonsoft.Json;,public class Person { public string Name { get; set; } },// 反序列化示例,string json = "{"Name":"John"}";,Person person = JsonConvert.DeserializeObject(json);,

C#中,JSON反序列化是将JSON格式的字符串转换为相应的C#对象的过程,这一过程在数据交换和存储中非常常见,特别是在与Web服务交互时,以下是关于C#中JSON反序列化的详细介绍:

一、使用Newtonsoft.Json库进行反序列化

1、安装Newtonsoft.Json

可以通过NuGet包管理器安装Newtonsoft.Json库,在Visual Studio的“工具”菜单中选择“NuGet包管理器”,然后搜索“Newtonsoft.Json”并安装。

也可以在命令行中使用以下命令安装:

 Install-Package Newtonsoft.Json

2、**创建C#类

假设我们有以下JSON数据:

 {
       "Name": "John",
       "Age": 30,
       "IsEmployed": true,
       "Skills": ["C#", "Java", "JavaScript"]
     }

我们需要创建一个与该JSON数据结构相匹配的C#类:

 public class Person
     {
       public string Name { get; set; }
       public int Age { get; set; }
       public bool IsEmployed { get; set; }
       public List<string> Skills { get; set; }
     }

3、反序列化JSON字符串

使用Newtonsoft.Json库中的JsonConvert类的DeserializeObject方法可以将JSON字符串反序列化为C#对象:

C# Json反序列化

 using Newtonsoft.Json;
     using System;
     using System.Collections.Generic;
     class Program
     {
       static void Main()
       {
         string json = @"{
           ""Name"": ""John"",
           ""Age"": 30,
           ""IsEmployed"": true,
           ""Skills"": [""C#"", ""Java"", ""JavaScript""]
         }";
         Person person = JsonConvert.DeserializeObject<Person>(json);
         Console.WriteLine($"Name: {person.Name}");
         Console.WriteLine($"Age: {person.Age}");
         Console.WriteLine($"IsEmployed: {person.IsEmployed}");
         Console.WriteLine("Skills:");
         foreach (var skill in person.Skills)
         {
           Console.WriteLine(skill);
         }
       }
     }

上述代码将输出:

 Name: John
     Age: 30
     IsEmployed: True
     Skills:
     C#
     Java
     JavaScript

二、使用System.Text.Json库进行反序列化(.NET Core 3.0及更高版本)

1、**创建C#类

同样使用前面创建的Person类。

2、反序列化JSON字符串

使用System.Text.Json库中的JsonSerializer类的Deserialize方法可以将JSON字符串反序列化为C#对象:

 using System;
     using System.Collections.Generic;
     using System.Text.Json;
     class Program
     {
       static void Main()
       {
         string json = @"{
           ""Name"": ""John"",
           ""Age"": 30,
           ""IsEmployed"": true,
           ""Skills"": [""C#"", ""Java"", ""JavaScript""]
         }";
         Person person = JsonSerializer.Deserialize<Person>(json);
         Console.WriteLine($"Name: {person.Name}");
         Console.WriteLine($"Age: {person.Age}");
         Console.WriteLine($"IsEmployed: {person.IsEmployed}");
         Console.WriteLine("Skills:");
         foreach (var skill in person.Skills)
         {
           Console.WriteLine(skill);
         }
       }
     }

上述代码将输出与使用Newtonsoft.Json库相同的结果。

C# Json反序列化

三、处理复杂的JSON结构

1、嵌套对象

如果JSON数据包含嵌套对象,可以在C#类中定义相应的嵌套类。

 {
       "Person": {
         "Name": "John",
         "Age": 30,
         "Address": {
           "Street": "123 Main St",
           "City": "Anytown",
           "State": "CA",
           "ZipCode": "12345"
         }
       }
     }

可以创建以下C#类来表示该JSON数据:

 public class Address
     {
       public string Street { get; set; }
       public string City { get; set; }
       public string State { get; set; }
       public string ZipCode { get; set; }
     }
     public class Person
     {
       public string Name { get; set; }
       public int Age { get; set; }
       public Address Address { get; set; }
     }

然后使用与之前相同的反序列化方法将JSON字符串转换为Person对象。

2、数组和集合

如果JSON数据包含数组或集合,可以使用C#中的列表、数组或其他集合类型来表示。

 [
       {
         "Name": "John",
         "Age": 30
       },
       {
         "Name": "Jane",
         "Age": 25
       }
     ]

可以创建以下C#类来表示该JSON数据:

C# Json反序列化

 public class Person
     {
       public string Name { get; set; }
       public int Age { get; set; }
     }

使用JsonConvert.DeserializeObject<List<Person>>(json)JsonSerializer.Deserialize<List<Person>>(json)将JSON数组反序列化为List<Person>对象。

四、错误处理和验证

1、错误处理

在进行反序列化时,可能会遇到各种错误,如JSON格式不正确、数据类型不匹配等,可以使用try-catch块来捕获这些异常并进行相应的处理:

 try
     {
       Person person = JsonConvert.DeserializeObject<Person>(json);
       // 处理反序列化后的对象
     }
     catch (JsonException ex)
     {
       // 处理JSON解析错误
       Console.WriteLine($"JSON解析错误: {ex.Message}");
     }
     catch (Exception ex)
     {
       // 处理其他错误
       Console.WriteLine($"错误: {ex.Message}");
     }

2、验证

在反序列化之前,可以对JSON字符串进行验证,以确保其格式正确,可以使用正则表达式或其他方法来验证JSON字符串的基本结构。

还可以使用JSON Schema验证库来验证JSON数据是否符合特定的模式。

C#中进行JSON反序列化是一个常见的任务,可以使用多种方法和库来实现,根据具体的需求和项目环境,可以选择适合的库和方法来进行JSON反序列化,要注意错误处理和验证,以确保反序列化过程的稳定性和可靠性。