С# JSON-декодирование с использованием помощников Web Matrix
Я искал какое-то время для чистого и чистого способа преобразования объекта JSON в динамический объект.
(Я мог бы передать объект, но API потоковой передачи Twitter фактически отправляет два разных объекта JSON с возможностью создания будущих типов объектов!)
Код, который я использую в настоящее время, это:
Отключить JSON в динамический объект С#?
Но это не самый чистый код, и я играл с веб-матрицей и заметил, что у них хорошие методы JSON.Decode(string) и JSON.Encode(object) и они хотят использовать их.
http://msdn.microsoft.com/en-us/library/system.web.helpers.json(v=vs.99).aspx
Добавление ссылки на System.Web.Helpers на мое консольное приложение на С# Мне удалось скомпилировать решение, вызывающее JSON.Decode, но... оно выдает неприятное исключение.
Возможно, это связано с тем, что я использую его не так, как предполагалось (внешняя веб-матрица), но любые идеи? Вероятно, ожидая простого, нет, это глупый ответ; -)
Попытка метода "System.Web.Helpers.Json.Decode(System.String)" для доступа к полю "System.Web.Helpers.Json._serializer" не удалась.
Я использую VS2010.
Подробнее:
Исправлено System.FieldAccessException Сообщение = Попытка метода "System.Web.Helpers.Json.Decode(System.String)" для доступа к полю "System.Web.Helpers.Json._serializer" не удалась. Источник = System.Web.Helpers Трассировки стека: в System.Web.Helpers.Json.Decode(значение строки) на Components.DataCollection.ConvertTwitterStream.ConvertTweets() в C:\Users\Administrator\documents\visual studio 2010\Projects\ISMM\Components\DataCollection\ConvertTwitterStream.cs: строка 35 InnerException:
Ответы
Ответ 1
Чтобы поддерживать ответ jbtule, JsonFx v2 (http://github.com/jsonfx/jsonfx) делает это очень просто. В приведенном ниже примере показан полный раунд с динамическим объектом, который строится из строки JSON, а затем сериализован обратно в JSON.
string input = "{ \"foo\": true, \"array\": [ 42, false, \"Hello!\", null ] }";
dynamic value = new JsonReader().Read(input);
// verify that it works
Console.WriteLine(value.foo); // true
Console.WriteLine(value.array[0]); // 42
Console.WriteLine(value.array.Length); // 4
string output = new JsonWriter().Write(value);
// verify that it works
Console.WriteLine(output); // {"foo":true,"array":[42,false,"Hello!",null]}
Ответ 2
Отладка вызовов на "Json.Decode" завершается неудачно, если включен процесс хостинга Visual Studio (который является значением по умолчанию). Я нашел, что это сработало с хостингом или отключено без отладчика.
Процесс хостинга может быть отключен для вашего проекта, выполнив следующие инструкции:
http://msdn.microsoft.com/en-us/library/ms185330.aspx
Ответ 3
JsonFx Поддерживает несколько стратегий привязки json к .net-объектам, включая динамические объекты.
https://github.com/jsonfx/jsonfx
Ответ 4
Я не помню, поддерживает ли Json.NET динамические объекты, но кажется, что вы можете сделать это с помощью небольшого дополнительного пользовательского кода.
http://json.codeplex.com/
http://weblogs.asp.net/britchie/archive/2010/08/05/json-net-dynamic-extensions.aspx
Ответ 5
Microsoft добавила класс помощника Json для веб-матрицы Beta 2. Пример кода здесь http://www.mikesdotnetting.com/Article/160/WebMatrix-Working-With-The-JSON-Helper
Ответ 6
Кажется, что проблема с привилегиями при использовании Json.Decode в консольном приложении. Щелкните правой кнопкой мыши на EXE и "Запуск от имени администратора...", и он должен работать.
Я не уверен, есть ли способ заставить Visual Studio запускать исполняемый файл как администратор для целей отладки или нет.