2009-09-19 2 views
3

Я очень новичок в JSON, и мне нужно разобрать некоторые, которые предоставляет API. Быстрый поиск google появился JSON.NET, поэтому я пытаюсь использовать его сейчас, чтобы разобрать этот JSON в объект списка. Прежде всего, является JSON.NET лучшей библиотекой для использования для этого?Deserializing некоторый JSON с JSON.NET

Это то, что я пытаюсь сделать: например, у меня есть класс , который называется Item. В json есть много «элементов» (если это то, что они называются), и каждый содержит 3 поля: целое число с именем id, строкой с именем name и датой с именем creationTime. Я хотел бы проанализировать все эти элементы «Элементы» из json в список предметов объекта. Я создал 3 поля в классе Item для соответствия JSON. Как это можно сделать с помощью JSON.NET?

Я пробовал:

List<Item> fav = (List<Item>)new JsonSerializer().Deserialize(new JsonReader((TextReader)new StreamReader(response.GetResponseStream()))); 

, но это не похоже на работу. Я получаю ошибку кастинга - она ​​просто не может обработать ее в оболочке списка, но я даже не уверен, способен ли она обрабатывать JSON в один класс Item (JSON.NET не очень хорошо документирован, м будет отлаживать его завтра).

Можете ли вы дать мне пример кода, чтобы объяснить, как я могу разобрать его с помощью JSON.NET?

Спасибо!

ОБНОВЛЕНИЕ: Кстати, забыл упомянуть - мой проект будет нацелен на .NET Framework 2.0, поэтому я использую устаревшую версию JSON.NET: 1.3.1. Существуют ли какие-либо ОГРОМНЫЕ преимущества, которые могут сделать проект целесообразным преобразовать в .NET 3.5, подрывая минимальные системные требования?

UPDATE # 2: я решил использовать класс JavaScriptSerializer в System.Web.Extensions.dll вместо Json.NET, и вопрос о том, что размещена here. Благодаря!

+1

«Похоже, работа "не очень подробно. Что происходит? И да, я бы сказал, что LINQ является довольно большим преимуществом для .NET 3.5 в целом, а также означает, что вы можете использовать более современную версию JSON.NET. –

+0

@ Хорошо, прежде всего, насколько я знаю, это первый раз, когда вы ответили на один из моих сообщений, так что спасибо! К сожалению, я не знаю LINQ, но я хочу это узнать! Тогда я попытаюсь начать использовать более новую версию. Что не работает, так это то, что я получаю ошибку кастинга - она ​​просто не может преобразовать ее в такой список. По крайней мере, я считаю, что это значит, поскольку JSON.NET не очень хорошо документирован. Кто-нибудь раньше использовал JSON.NET, и если да, то могли бы вы объяснить, как вы подходите к такой проблеме?Благодаря! ;) –

+0

Я подозреваю, что проблема в том, что вы специально просите о помощи с более старой версией JSON.NET; многие люди будут знакомы только с обновленной версией. –

ответ

0

Я бы посоветовал вам перейти на .net framework 3.5 и использовать ASP.Net MVC для создания ваших json-сервисов. См:

http://msmvps.com/blogs/omar/archive/2008/10/03/create-rest-api-using-asp-net-mvc-that-speaks-both-json-and-plain-xml.aspx

+1

Эта ссылка больше не работает. Можете ли вы разместить здесь соответствующую информацию? –

1

Я понимаю, что этот вопрос о 3 лет, но я думал, что только добавить, что если вы хотите построить Апи на основе JSON, NancyFx является удивительным: http://nancyfx.org/

EDIT : Пример в соответствии с запросом, очень простой. Чтобы начать работу, просто добавьте пакет asp.net nancyfx в веб-проект через NuGet. (если вы добавите его в существующее приложение на дополнительном пути, вам нужно будет добавить местоположение в web.config, в противном случае вы готовы к работе)

+0

Выглядит неплохо! Не могли бы вы связать/опубликовать соответствующий образец кода? Благодарю. –

+0

Спасибо - кажется элегантным и понятным. Но этот вопрос затрагивает другую тему: разбор JSON, а не запись JSON. ** Когда вы «Bind ()', это запрос JSON, который разобран в 'order'? ** Если нет: к сожалению, принятый в настоящее время ответ также не соответствует теме вопроса - не уверен, почему я принял его 3 года назад , Я закончил использование встроенных инструментов сериализации (http://stackoverflow.com/q/1450513/130164). Знаете ли вы, что **, если NancyFx может анализировать JSON **, и если да, можете ли вы добавить образец кода десериализации ввода JSON в ответ, чтобы этот вопрос вернулся на правильный путь? –

+0

Вы правы - «this.Bind ()» берет тело запроса и десериализует его на «заказ», это очень аккуратно. Нэнси использует JSON.Net, поскольку это по умолчанию json parser, и ASP.Net MVC4 также будет использовать Json.Net по умолчанию. В качестве альтернативы есть также ServiceStack, но мне всегда было комфортно с Json.net. – Doobi

Смежные вопросы