[译]如何使用Newtonsoft.Json将JSON对象反序列化为不同类型?

作者:SIDDHARTH PANDEY原文地址

我最近发表了一些文章来解释如何使用Newtonsoft.Json框架。如果你想了解更多,一定要去看看。在本文中,我将告诉您如何使用NewtonSoft.JSON将JSON对象反序列化为不同类型。

在处理已知类型时,使用此框架反序列化非常简单。有时类型未知,但仍需要以某种方式读取和处理JSON响应。

其中一个例子是从一个API获取响应,其中的键是动态的,或者结构是完全不同的,因为您没有具体的类型来处理它。但不要担心,因为Newtonsoft.Json已经为此类情况提供了保护。

我正在使用控制台应用程序,Program.cs文件如下所示:

class Program
{
    static void Main(string[] args)
    {
        Console.Clear();

        DifferentTypesDemo.ShowDemo();

        Console.ReadLine();
    }
}

如上所示,我有一个名为differentitypesdemo的类,它有一个名为ShowDemo的静态方法,其实现如下所示:

public class DifferentTypesDemo
{
    public static void ShowDemo()
    {
        string authorData = @"{
                                'Name': 'Sid',
                                'IsHappy': true,
                                'Country': 'India',
                                'Age': 25
                            }";

        Console.WriteLine("---- using var ----");
        var author = JsonConvert.DeserializeObject(authorData);

        Console.WriteLine("---- Dictionary ----");
        Dictionary<string, string> authorDictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(authorData);

        Console.WriteLine("---- Anonymouns types ----");
        var authorAnonymousType = new
        {
            Name = String.Empty,
            IsHappy = false,
            AnotherProperty = String.Empty
        };

        var anotherAuthor = JsonConvert.DeserializeAnonymousType(authorData, authorAnonymousType);
        Console.WriteLine(anotherAuthor.Name);
    }
}

让我们理解上面的代码。

  • 第5行定义了一个字符串对象,该对象具有数据的JSON表示。
  • 第13行是使用JsonConvert并将string对象中的数据反序列化为.NET对象的常见方法。在已知类型的情况下,这可以与特定类型一起使用。
  • Json框架还支持将数据反序列化到字典中。在本例中,它的类型是Dictionary。这里要记住的重要一点是,并不是所有的东西都可以反序列化成字典。
  • 当API返回的响应是一个集合并且每个项的键是动态的时,这非常有用——可以是int或string。因此,可以使用这种反序列化方法将数据转换为字典。然后循环处理它。
  • 使用此框架反序列化的另一种方法是使用JsonConvert的DeserializeAnonymousType方法。C#允许我们在不创建类的情况下动态创建匿名类型。第19行定义了这样一个匿名对象。
  • 接下来,在第26行,使用这个特殊方法反序列化author数据。结果对象将只包含在匿名类型定义中定义的那些成员。
  • 最后一个选项在只希望将部分数据转换为.NET对象时非常有用。将忽略数据中的不匹配成员。

这个框架非常适合处理JSON数据和.NET对象。我希望这篇文章能够解释如何正确地使用Newtonsoft.JSON将JSON对象反序列化为不同类型。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

3 × 1 =