JSON(JavaScript 对象表示法)是一种轻量级的数据交换格式,常用在 Web 应用程序中。C# 提供了几种高效解析 JSON 数据的方法,简化了与 Web API 和其他基于 JSON 的系统的集成。本文探讨了三种常用的方法,并重点介绍了它们的优缺点。
目录
- 使用 JsonConvert.DeserializeObject() 解析 JSON
- 使用 JObject.Parse() 进行动态 JSON 解析
- 使用 JavaScriptSerializer().Deserialize()
使用 JsonConvert.DeserializeObject()
解析 JSON
Newtonsoft.Json
库是一个广泛使用且高效的 .NET JSON 库。它提供了 JsonConvert.DeserializeObject()
方法用于高效的 JSON 解析。您需要通过 NuGet 包管理器安装它(”Newtonsoft.Json”)。
using Newtonsoft.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
public class Example
{
public static void Main(string[] args)
{
string jsonString = @"{
""Name"": ""John Doe"",
""Age"": 30,
""City"": ""New York""
}";
Person person = JsonConvert.DeserializeObject<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}");
Console.WriteLine($"Age: {person.Age}");
Console.WriteLine($"City: {person.City}");
}
}
这段代码定义了一个与 JSON 结构匹配的 Person
类。JsonConvert.DeserializeObject<Person>(jsonString)
将 JSON 反序列化为 Person
对象,从而可以轻松访问其属性。这通常是最有效率和功能最丰富的做法。
使用 JObject.Parse()
进行动态 JSON 解析
同样利用 Newtonsoft.Json
,JObject.Parse()
方法提供动态解析。当 JSON 结构未知或需要灵活的属性访问时,这非常有用。
using Newtonsoft.Json.Linq;
public class Example
{
public static void Main(string[] args)
{
string jsonString = @"{
""Name"": ""Jane Doe"",
""Age"": 25,
""City"": ""London"",
""Address"": {
""Street"": ""123 Main St"",
""Zip"": ""10001""
}
}";
JObject jObject = JObject.Parse(jsonString);
string name = (string)jObject["Name"];
int age = (int)jObject["Age"];
string city = (string)jObject["City"];
string street = (string)jObject["Address"]["Street"];
Console.WriteLine($"Name: {name}");
Console.WriteLine($"Age: {age}");
Console.WriteLine($"City: {city}");
Console.WriteLine($"Street: {street}");
}
}
JObject.Parse()
创建一个 JObject
。属性使用索引器访问,可以访问嵌套对象。类型转换对于正确检索值至关重要。
使用 JavaScriptSerializer().Deserialize()
内置的 JavaScriptSerializer
(System.Web.Script.Serialization
)提供了一个更简单的替代方案。但是,它通常不如 Newtonsoft.Json
高效,并且功能较少。出于完整性考虑,将其包含在内,但在生产应用程序中应避免使用它。
using System.Web.Script.Serialization;
public class Example
{
public static void Main(string[] args)
{
string jsonString = @"{
""Name"": ""Peter Jones"",
""Age"": 40,
""City"": ""Paris""
}";
JavaScriptSerializer serializer = new JavaScriptSerializer();
Person person = serializer.Deserialize<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}");
Console.WriteLine($"Age: {person.Age}");
Console.WriteLine($"City: {person.City}");
}
}
这使用了 JavaScriptSerializer.Deserialize<Person>()
。请注意,根据您的项目,您可能需要添加对 System.Web.Extensions
的引用。
总而言之,Newtonsoft.Json
的 JsonConvert.DeserializeObject()
因其性能和功能而被推荐。JObject.Parse()
提供了灵活性,而 JavaScriptSerializer()
提供了一个基本的替代方案。选择最适合您需求的方法。在生产代码中始终处理潜在异常(例如 JsonReaderException
)。