Десериализация JSON в объект

#c# #serialization #deserialization

#c# #сериализация #десериализация

Вопрос:

Я десериализирую строку JSON в объект. Я не могу использовать Dictionary<string, string> , потому что JSON внутри сложный. Я знаю о Dictionary<string, dynamic> , но у меня нет .NET 3.5 framework, поэтому я не могу использовать dynamic .

Итак, я оказался здесь:

 object json = new JavaScriptSerializer().Deserialize<object>("myjson");
  

Но я не вижу способа получить доступ json без отражения. Есть какие-нибудь советы?

Комментарии:

1. Я не очень хорошо знаком с этой областью, поэтому прошу прощения, если это глупый вопрос… но почему вы не можете использовать отражение для доступа json.html ?

2. Я могу использовать, но я думаю, что если вы видите, что используете отражение в середине чего-то тривиального, вы делаете что-то неправильно. В этом случае, я думаю, Им.

Ответ №1:

Я бы использовал ServiceStack.Текст и его синтаксический анализ с помощью JSONObject.Parse.

Тогда у вас есть словарь данных, который легко читать.

ServiceStack быстрее и качественнее, чем Json.NET .

Ответ №2:

Это может быть сделано с помощью servicestack’s JsonSerializer так же легко, как:

 var dictionary = JsonSerializer.DeserializeFromString<Dictionary<string,string>>(myJson);
  

Это еще более лаконично, если вы используете методы расширения:

 var dictionary = myJson.FromJson<Dictionary<string,string>>();
  

В противном случае, если вы предпочитаете, вы можете использовать динамический API:

 var jsonObj = JsonObject.Parse(myJson);
var value = jsonObj.Get("key");
  

Вот несколько реальных способов использования, демонстрирующих различные способы десериализации динамической полезной нагрузки JSON:

В качестве бонуса вы будете использовать .Самый быстрый в СЕТИ сериализатор JSON 🙂

Сериализатор Json от ServiceStack также доступен для загрузки на NuGet с:

 PM> Install-Package ServiceStack.Text
  

Комментарии:

1. Привет, Демис, у меня есть пара вопросов 1. Для синтаксического анализа больших файлов json доступна ли опция потокового синтаксического анализа Json? 2. Когда Json встроен в квадратную скобку [], синтаксический анализ завершается неудачей, есть ли какой-либо доступный метод для его переопределения?

2. 1) № 2) Я не понимаю пример, но все доступные перехватчики синтаксического анализа настройки включены JsConfig и JsConfig<T>

3. Спасибо тебе, Демис. Я получил следующую ошибку «SerializationException: определения типов должны начинаться с ‘{‘, ожидая сериализованный тип ‘RootObject’, получил строку, начинающуюся с: ]» при попытке проанализировать объект json, представленный по ссылке здесь . Когда я удаляю первый символ в файле [ и последний символ] в файле, я могу успешно выполнить синтаксический анализ.

Ответ №3:

JSON.NET это популярная библиотека сериализации JSON, она позволяет вам сериализовать ваши типизированные объекты в / из JSON, а также получать типизированные представления метаструктуры (через JObject класс), когда вы не знаете структуру вашего JSON.

Я обнаружил, что это лучше, чем предложения, которые .NET поставляется с готовым JSON во многих случаях.