Подтвердить что ты не робот

Декодирование JSON в С#

как декодировать json-ответ в С#?

4b9b3361

Ответ 4

Интегрированные классы .NET имеют свои достоинства. Но у них есть свои недостатки.

Например, DataContractJsonSerializer недоступен в .NET 2.0, System.Web.Extensions нужны права администратора для его установки (в NET 2.0 - вы можете его скопировать на локальном компьютере, если у вас нет проекта WebSite) Работа в Silverlight и WindowsPhone. Если у вас есть проект WebSite, вам нужно скопировать сборки System.Web.Extensions в ваш проект и затем удалить их из GAC, иначе VisualStudio не поймет, что он должен их скопировать.

Но что более важно, если вы работаете со значительной частью любой библиотеки JavaScript, например. SlickGrid (сетка AJAX), вы наткнетесь на этот действительный объект JavaScript (но это недействительный JSON, поскольку fnFormatDate_DE - это вызов функции, а не текст, в нем отсутствуют кавычки):

FormatterCallback :
{
     name : "DateFormatter_DE"
     func:  fnFormatDate_DE(val)
}

Невозможно сериализовать это с помощью любого из интегрированных классов .NET(потому что это недействительный JSON). Кроме того, они не соответствуют производительности, доступности в SilverLight, Windows Phone и WindowsRT. Они не являются лицензиями OpenSource и MIT. У них нет поддержки отступов (читаемый человеком JSON), и они не могут сериализовать DataTables, и у них есть проблемы с циклическими ссылками. Вы не можете справляться с ошибками сериализации с ними, не можете сериализовать перечисления на свои имена, и вы не можете переключать формат даты (ОК, это не проблема, потому что формат даты MS является единственным форматом даты сафари дерьмо понимает [это не undestand ISO]), и они не сериализуют ни nHibernate, ни Entity...

Но самое главное, вы не захотите переключать свою библиотеку или корректировать ссылки на проекты, если вы переходите с .NET 2.0 на 4.0, вы не хотите переписывать свой код, если хотите использовать какой-либо код в SilverLight/Windows Телефон, и вы не хотите писать функцию, чтобы украсить JSON, если вы хотите посмотреть, правильно ли вы получили класс, и вы не захотите написать свой собственный метод для выделения кавычек только потому, что библиотеки Microsoft могут " t обрабатывает недействительный JSON.

Кроме того, библиотеки Microsoft имеют низкую производительность, и они не могут сериализоваться в BSON (для использования с базами данных NoSQL, такими как MongoDB).
Поэтому по всем этим причинам лучше выбрать NewtonSoft JSON (JSON.NET).
Это бесплатно и OpenSource (лицензия MIT, а не GPL).
Здесь есть хорошая сравнительная матрица:
http://james.newtonking.com/pages/json-net.aspx