Десериализация вложенного JSON массива внутри вложенного JSON объекта в c#? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть файл json следующим образом:

{
  "container" : {
    "cans1" : 
    [
      {
        "name" : "sub",
        "ids" : 
        [
          "123"
        ]
      },
      {
        "name" : "Fav",
        "ids" : 
        [
          "1245","234"
        ]
      },
      {
        "name" : "test",
        "ids" : 
        [
          "DOC12","DOC1234"
        ]
      }
    ],
    "ids" : 
    [
      "1211","11123122"
    ],
"cans2" : 
    [
      {
        "name" : "sub1",
        "ids" : 
        [
          "123"
        ]
      }
     ],
     "ids" : 
    [
      "121","11123"
    ]

}

Я хочу получить значения имен sub, fav, test и ids для каждой банки в этом json файле, используя c#

1 Ответ

0 голосов
/ 30 апреля 2020

Установить nuget Newtonsoft.Json. Создайте следующую иерархию:

using System;
using System.Collections.Generic;

using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

public class MyClass
{
    [JsonProperty("container")]
    public Container Container { get; set; }
}

public class Container
{
    [JsonProperty("cans1")]
    public Cans[] Cans1 { get; set; }

    [JsonProperty("ids")]
    [JsonConverter(typeof(DecodeArrayConverter))]
    public long[] Ids { get; set; }

    [JsonProperty("cans2")]
    public Cans[] Cans2 { get; set; }
}

public class Cans
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("ids")]
    public string[] Ids { get; set; }
}

А затем

 JsonConvert.DeserializeObject<MyClass>(yourJsonString);

UPD

На основе комментария попробуйте следующее:

var des = JsonConvert.DeserializeObject<MyClass>(t);

foreach(var arr in des.Container.Where(r => r.Key.StartsWith("cans")))
{

    Console.WriteLine($"{arr.Key}");
    foreach(var elem in arr.Value)
    {
        Console.WriteLine($"    {elem.Value<string>("name")}");
    }
}

public class MyClass
{
    [JsonProperty("container")]
    public Dictionary<string, JArray> Container { get; set; }
}
...