Попытка преобразовать строку JSON в объект в C #. Используя действительно простой тестовый пример:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Проблема в том, что rout_list никогда не устанавливается; это неопределенный объект. Любые идеи?
JavaScriptSerializer
версию более MS, поскольку она не будет принимать ничего другого, кроме пользовательского форматирования JSON в WCF (например, поля даты, которые выглядят как даты, но не окружены в DATE (), терпят неудачу)Ответы:
Похоже, вы пытаетесь десериализовать в необработанный объект. Вы можете создать класс, который представляет объект, в который вы конвертируете. Это было бы наиболее полезно в тех случаях, когда вы имеете дело с большими объектами или строками JSON.
Например:
Тогда ваш код десериализации будет:
Дополнительную информацию можно найти в этом руководстве: http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx
источник
Или вы можете использовать библиотеку Newtownsoft.Json следующим образом:
Где
T
ваш тип объекта, который соответствует вашей строке JSON.источник
Вы, вероятно, не хотите просто объявлять rout_list как
object
тип. У него нет свойства .test, так что вы действительно не получите хороший объект обратно. Это одно из тех мест, где вам лучше определить класс или структуру, либо использовать ключевое слово dynamic.Если вы действительно хотите, чтобы этот код работал так, как он есть у вас, вам нужно знать, что объект, возвращаемый DeserializeObject, представляет собой общий словарь строк, объектов. Вот код, чтобы сделать это таким образом:
Если вы хотите использовать динамическое ключевое слово, вы можете прочитать, как здесь .
Если вы объявляете класс или структуру, вы можете вызвать Deserialize вместо DeserializeObject следующим образом:
источник
object routes_list
. Используйтеvar
или явно повторяйте себя и объявляйте route_list как IDictionary <string, object>.Использование динамического объекта с JavaScriptSerializer.
источник
Newtonsoft работает быстрее, чем сериализатор Java-скриптов. ... это зависит от пакета Newtonsoft NuGet, который популярен и лучше, чем стандартный сериализатор.
однострочный код
источник
Вот простой урок, который я собрал из разных постов ... Он был протестирован около 15 минут, но, похоже, работает для моих целей. Он использует
JavascriptSerializer
для выполнения работы, на которую можно ссылаться в вашем приложении, используя информацию, подробно изложенную в этом посте. .Приведенный ниже код можно запустить в LinqPad, чтобы проверить его:
Надеюсь, поможет!
источник
Вы можете легко выполнить ваши требования с помощью библиотеки Newtonsoft.Json. Я пишу один пример ниже, посмотрите на это.
Класс для типа объекта, который вы получаете:
Код:
это очень простой способ разобрать ваш JSON.
источник
Как сказал tripletdad99
но если вы не хотите создавать дополнительный объект, вы можете сделать это
Dictionary
вместоисточник
Добавьте этот ddl для ссылки на ваш проект: System.Web.Extensions.dll
используйте это пространство имен: using System.Web.Script.Serialization;
источник
Скопируйте свой Json и вставьте его в текстовое поле на json2csharp и нажмите кнопку «Создать».
CS класс будет сгенерирован использовать этот файл CS , как показано ниже
Где
RootObject
имя сгенерированного файла CS ;источник
Другой быстрый и простой способ полуавтоматизировать эти шаги - это:
app.quicktype.io генерирует методы сериализации на основе Newtonsoft. Кроме того, теперь вы можете использовать код как:
Клиент WebClient = новый WebClient ();
строка myJSON = client.DownloadString (" https://URL_FOR_JSON.com/JSON_STUFF ");
var myClass = Newtonsoft.Json.JsonConvert.DeserializeObject (myJSON);
источник
Преобразовать строку JSON в объект в C #. Используя приведенный ниже тестовый пример ... это сработало для меня. Здесь " MenuInfo " - мой объект класса C #.
источник
Сначала вы должны включить библиотеку, как:
источник