#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 во многих случаях.