在C#中,将JSON字符串转换为C#实体类有多种方法。以下是几种常用的方法:
1. 使用 Newtonsoft.Json (Json.NET)
Newtonsoft.Json
是一个非常流行且强大的 JSON 序列化/反序列化库。你可以使用它轻松地将 JSON 字符串转换为 C# 对象。
安装 Newtonsoft.Json
如果你还没有安装 Newtonsoft.Json,可以通过 NuGet 包管理器安装:
Sh
深色版本
Install-Package Newtonsoft.Json
示例代码
Csharp
深色版本
1using Newtonsoft.Json;
2
3public class Person
4{
5 public string Name { get; set; }
6 public int Age { get; set; }
7}
8
9public static void Main()
10{
11 string json = "{\"Name\":\"John Doe\",\"Age\":30}";
12
13 Person person = JsonConvert.DeserializeObject<Person>(json);
14
15 Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
16}
2. 使用 System.Text.Json (C# 8.0+)
从 C# 8.0 开始,.NET Framework 和 .NET Core 提供了新的 JSON 序列化器 System.Text.Json
,它比 Newtonsoft.Json 更快,但配置选项较少。
示例代码
Csharp
深色版本
1using System.Text.Json;
2
3public class Person
4{
5 public string Name { get; set; }
6 public int Age { get; set; }
7}
8
9public static void Main()
10{
11 string json = "{\"Name\":\"John Doe\",\"Age\":30}";
12
13 Person person = JsonSerializer.Deserialize<Person>(json);
14
15 Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
16}
3. 使用 Jil (JSON IL)
Jil
是一个轻量级的 JSON 序列化器,适用于性能敏感的应用程序。
安装 Jil
Sh
深色版本
Install-Package Jil
示例代码
Csharp
深色版本
1using Jil;
2
3public class Person
4{
5 public string Name { get; set; }
6 public int Age { get; set; }
7}
8
9public static void Main()
10{
11 string json = "{\"Name\":\"John Doe\",\"Age\":30}";
12
13 Person person = JSON.Deserialize<Person>(json);
14
15 Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
16}
4. 使用 ServiceStack.Text
ServiceStack.Text
是另一个高性能的 JSON 序列化库。
安装 ServiceStack.Text
Sh
深色版本
Install-Package ServiceStack.Text
示例代码
Csharp
深色版本
1using ServiceStack.Text;
2
3public class Person
4{
5 public string Name { get; set; }
6 public int Age { get; set; }
7}
8
9public static void Main()
10{
11 string json = "{\"Name\":\"John Doe\",\"Age\":30}";
12
13 Person person = JsonDeserializer.DeserializeFromString<Person>(json);
14
15 Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
16}
5. 使用 JSON-Binding (C# 8.0+)
从 C# 8.0 开始,你可以使用 JsonSerializer
的 JsonConverter
和 JsonPropertyName
属性来进一步定制序列化和反序列化的过程。
示例代码
Csharp
深色版本
1using System.Text.Json;
2using System.Text.Json.Serialization;
3
4public class Person
5{
6 [JsonPropertyName("name")]
7 public string Name { get; set; }
8
9 [JsonPropertyName("age")]
10 public int Age { get; set; }
11}
12
13public static void Main()
14{
15 string json = "{\"name\":\"John Doe\",\"age\":30}";
16
17 Person person = JsonSerializer.Deserialize<Person>(json);
18
19 Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
20}
总结
- Newtonsoft.Json: 功能丰富,易于使用,适合大多数场景。
- System.Text.Json: 更快,但配置选项较少,适合追求性能的应用。
- Jil: 轻量级,适合性能敏感的应用。
- ServiceStack.Text: 高性能,适用于大规模数据处理。
- JSON-Binding: 提供更细粒度的控制,适用于特定的需求。
选择哪种方法取决于你的具体需求,包括性能要求、功能需求和兼容性等因素。