Уничтожить вложенные JSON в объекты C #

Я получаю JSON из API, который выглядит так:

{ "Items": { "Item322A": [{ "prop1": "string", "prop2": "string", "prop3": 1, "prop4": false },{ "prop1": "string", "prop2": "string", "prop3": 0, "prop4": false }], "Item2B": [{ "prop1": "string", "prop2": "string", "prop3": 14, "prop4": true }] }, "Errors": ["String"] } 

Я попробовал несколько подходов для представления этого JSON в объектах c # (слишком много, чтобы перечислять здесь). Я пробовал со списками и словарями, вот недавний пример того, как я пытался его представить:

  private class Response { public Item Items { get; set; } public string[] Errors { get; set; } } private class Item { public List SubItems { get; set; } } private class SubItem { public List Infos { get; set; } } private class Info { public string Prop1 { get; set; } public string Prop2 { get; set; } public int Prop3 { get; set; } public bool Prop4 { get; set; } } 

И вот метод, который я использую для десериализации JSON:

  using (var sr = new StringReader(responseJSON)) using (var jr = new JsonTextReader(sr)) { var serial = new JsonSerializer(); serial.Formatting = Formatting.Indented; var obj = serial.Deserialize(jr); } 

obj содержит Items и Errors . Items содержат SubItems , но SubItemsnull . Таким образом, ничего, кроме Errors , фактически десериализуется.

Это должно быть просто, но по какой-то причине я не могу понять правильное представление объекта

Для "Items" используйте Dictionary> , то есть:

 class Response { public Dictionary> Items { get; set; } public string[] Errors { get; set; } } class Info { public string Prop1 { get; set; } public string Prop2 { get; set; } public int Prop3 { get; set; } public bool Prop4 { get; set; } } 

Это предполагает, что имена элементов "Item322A" и "Item2B" будут варьироваться от ответа к ответу и будут читать эти имена в качестве ключей словаря.

Пример скрипки .

Используйте этот сайт для представления:

http://json2csharp.com/

что-то вроде этого может помочь вам

 public class Item322A { public string prop1 { get; set; } public string prop2 { get; set; } public int prop3 { get; set; } public bool prop4 { get; set; } } public class Item2B { public string prop1 { get; set; } public string prop2 { get; set; } public int prop3 { get; set; } public bool prop4 { get; set; } } public class Items { public List Item322A { get; set; } public List Item2B { get; set; } } public class jsonObject { public Items Items { get; set; } public List Errors { get; set; } } 

Вот как десериализовать (используйте class JsonConvert):

 jsonObject ourlisting = JsonConvert.DeserializeObject(strJSON); 

Вы можете использовать Json.Parse, чтобы вы могли запрашивать данные – и просто используйте одну модель.

  private class Info { public string Prop1 { get; set; } public string Prop2 { get; set; } public int Prop3 { get; set; } public bool Prop4 { get; set; } } var result = JObject.Parse(resultContent); //parses entire stream into JObject, from which you can use to query the bits you need. var items = result["Items"].Children().ToList(); //Get the sections you need and save as enumerable (will be in the form of JTokens) List infoList = new List(); //init new list to store the objects. //iterate through the list and match to an object. If Property names don't match -- you could also map the properties individually. Also useful if you need to dig out nested properties. foreach(var subItem in items){ foreach(JToken result in subItem){ Info info = result.ToObject(); infoList.add(info); }} 
  • Уничтожить XML-объект с помощью динамического
  • Разбор большого json-файла в .NET.
  • Как сериализовать объект, который включает BufferedImages
  • Дезерминирование полиморфных типов с jacksonом
  • Json.NET Отключить десериализацию в DateTime
  • Можно ли указать путь в атрибуте для сопоставления свойства в моем classе с дочерним свойством в моем JSON?
  • Удаление десериализации JSON в .NET-объект с использованием Newtonsoft (или LINQ to JSON, возможно?)
  • Как использовать JSON.NET для десериализации в вложенный / рекурсивный словарь и список?
  • Десериализация JSON с использованием JSon.NET с динамическими данными
  • Как я могу разбирать JSON с C #?
  • Interesting Posts

    Как мы можем восстановить (не возвращать) пароль маршрутизатора?

    различия в приложении / json и application / x-www-form-urlencoded

    Как заблокировать файл с помощью C #?

    Создать таблицу в SQLite только в том случае, если она уже не существует

    Code Golf: число для слов

    Как я могу отобразить дополнительную информацию о загрузке и завершении работы на экране приветствия Windows 7?

    Как я могу по-прежнему видеть текст «человек» после того, как я брошу человека?

    Что такое расширение AppCompatActivity по сравнению с ActionBarActivity?

    Предотвращение удаленных рабочих столов от текущего пользователя в Windows 7

    Ссылки Firefox на локальные или сетевые страницы не работают

    Прерывистые блокировки, неспособные диагностировать более года

    Итерации двух списков или массивов с одним утверждением ForEach в C #

    Radeon 5500 с монитором Samsung – не получить полный экран?

    Удалить все в базе данных MongoDB

    Массив нулевой длины

    Давайте будем гением компьютера.