Уничтожить вложенные 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); }} 
  • Json.NET Отключить десериализацию в DateTime
  • Разбор большого json-файла в .NET.
  • Библиотека Jackson JSON: как создать экземпляр classа, содержащего абстрактные поля
  • Дезаминирование гетерогенного массива JSON в ковариантный список с использованием JSON.NET
  • Как использовать JSON.NET для десериализации в вложенный / рекурсивный словарь и список?
  • Отключить JSON в существующий объект (Java)
  • Как я могу разбирать JSON с C #?
  • Можно ли указать путь в атрибуте для сопоставления свойства в моем classе с дочерним свойством в моем JSON?
  • Как сериализовать объект, который включает BufferedImages
  • Удаление десериализации JSON в .NET-объект с использованием Newtonsoft (или LINQ to JSON, возможно?)
  • Interesting Posts

    Получение текущего каталога в веб-приложении .NET

    Cloned Linux не распознает пространство нового флеш-накопителя?

    Существует ли конвертер / инструмент Java для C ++?

    Как создать сервер localhost для запуска проекта AngularJS

    java.lang.UnsupportedClassVersionError: неверный номер версии в .class файле?

    Зачем использовать отношения 1 к 1 в дизайне базы данных?

    Используйте Messenger MVVM Light для передачи значений между View Model

    Как разрешить зависание ПК, вызванное внешним USB-накопителем?

    Экспорт данных MySQL в Excel в PHP

    Как узнать файлы «.automaticDestinations-ms», к которым относится приложение?

    Скрипт для создания папок в нескольких каталогах с использованием даты YYYYMMDD в качестве имени папки

    jqGrid – сохранение выбранного флажка

    Цикл командной строки для запуска команды для всех файлов в каталоге (плюс вспомогательные каталоги, если возможно

    Как программно выбрать селектируемые с помощью jQuery UI?

    Как расширить редактор vim до полного экрана в шпаклере?

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