我最近发表了一些文章来解释如何使用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对象反序列化为不同类型。