C# Programming

C#高效JSON解析

Spread the love

JSON(JavaScript 对象表示法)是一种轻量级的数据交换格式,常用在 Web 应用程序中。C# 提供了几种高效解析 JSON 数据的方法,简化了与 Web API 和其他基于 JSON 的系统的集成。本文探讨了三种常用的方法,并重点介绍了它们的优缺点。

目录

使用 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.JsonJObject.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()

内置的 JavaScriptSerializerSystem.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.JsonJsonConvert.DeserializeObject() 因其性能和功能而被推荐。JObject.Parse() 提供了灵活性,而 JavaScriptSerializer() 提供了一个基本的替代方案。选择最适合您需求的方法。在生产代码中始终处理潜在异常(例如 JsonReaderException)。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注