当您没有类型时,如何在 .NET 中反序列化 JSON 字符串

Posted

技术标签:

【中文标题】当您没有类型时,如何在 .NET 中反序列化 JSON 字符串【英文标题】:How to deserialize a JSON string in .NET, when you don't have a type for it 【发布时间】:2012-01-03 19:39:23 【问题描述】:

检查此网址:

http://api.***.com/1.1/users/811785/questions?sort=votes

这是来自 StackOveflow 的 API 的 URL。返回的 JSON 真的很复杂,我想把它转换成一个对象,这样我就可以在我的 ASP.NET MVC 的视图中使用它。

问题在于,javascriptSerializer 对象的Deserialize 方法将Type 参数作为其第二个参数。但是返回的 JSON 太复杂了,我不想创建一个强类型的对象来反序列化它。

我该怎么办?

【问题讨论】:

【参考方案1】:

在 .NET 4.0 中,您可以使用动态

这里有更多

http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2010/08/22/using-c-4.0-and-dynamic-to-parse-json.aspx

这里还有更多

http://dynamicjson.codeplex.com/

【讨论】:

【参考方案2】:

使用Json.NET 你可以做这样的事情

JObject o = JObject.Parse(json);

string name = (string)o["Name"];

【讨论】:

【参考方案3】:

您不需要像 JSON.NET 这样的额外库,只需使用 JavaScriptSerializer。

您可以考虑JavaScriptSerializer.DeserializeObject,它将返回一个Object,它基本上是一个Dictionary<string, object>

您必须继续强制转换才能获得嵌套值。

在你的Quick Watch中查看反序列化的对象,然后你就会知道你需要什么来转换你返回的Dictionary<>

【讨论】:

【参考方案4】:

试试@987654321@,它有很多Deserialize 重载方法,试试看,你一定会得到你想要的。

【讨论】:

以上是关于当您没有类型时,如何在 .NET 中反序列化 JSON 字符串的主要内容,如果未能解决你的问题,请参考以下文章

无论如何在 C# 中反序列化之前检查对象的类类型?

如何在 asp.net 中反序列化 Json-Object

如何在 .NET 中反序列化为本地集合?

当我尝试在 .NET Core 中反序列化 FormFile 对象时,为啥会出现奇怪的异常?

JSON.Net无法在自定义JsonConverter中反序列化json数组

在 Visual Basic .NET 中反序列化 JSON