Уничтожить вложенные 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 с C #?
  • Сериализация Java - java.io.InvalidClassException локальный class несовместим
  • Как реализовать пользовательский JsonConverter в JSON.NET для десериализации списка объектов базового classа?
  • Уничтожить XML-объект с помощью динамического
  • VB.net JSON Deserialize
  • Удаление десериализации JSON в .NET-объект с использованием Newtonsoft (или LINQ to JSON, возможно?)
  • Json.NET Отключить десериализацию в DateTime
  • Можно ли указать путь в атрибуте для сопоставления свойства в моем classе с дочерним свойством в моем JSON?
  • Полиморфизм в аннотациях jacksonа: использование @JsonTypeInfo
  • Десериализация JSON с использованием JSon.NET с динамическими данными
  • Давайте будем гением компьютера.