Как десериализовать строку JSON в .NET, когда у вас нет типа для нее - PullRequest
0 голосов
/ 22 ноября 2011

Проверьте этот URL:

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

Это URL из API StackOveflow. Возвращенный JSON действительно сложен, и я хотел бы преобразовать его в объект, чтобы я мог использовать его в своем представлении ASP.NET MVC.

Проблема в том, что метод Deserialize объекта JavaScriptSerializer принимает параметр Type в качестве второго параметра. Но возвращаемый JSON настолько сложен, что я не хочу создавать строго типизированный объект для его десериализации.

Что мне делать?

Ответы [ 4 ]

2 голосов
/ 22 ноября 2011

С Json.NET вы можете сделать что-то вроде этого

JObject o = JObject.Parse(json);

string name = (string)o["Name"];
2 голосов
/ 22 ноября 2011

в .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/

1 голос
/ 22 ноября 2011

Вам не нужна дополнительная библиотека, такая как JSON.NET, и просто работайте с JavaScriptSerializer.

Вы можете рассмотреть JavaScriptSerializer.DeserializeObject, который вернет Object, что в основном равно Dictionary<string, object>.

Вы должны продолжить приведение , чтобы получить вложенное значение.

См. десериализованный объект в вашем Quick Watch , затемвы будете знать, что именно вам нужно, чтобы разыграть возвращенную Dictionary<>

0 голосов
/ 22 ноября 2011

Попробуйте <a href="http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx" rel="nofollow">System.Web.Script.JavascriptSerializer</a>, у которого много Deserialize перегруженных методов, поиграйте с ним, и вы обязательно получите то, что хотите.

...