Попытка C # разобрать Json в словарь с внутренними массивами - PullRequest
0 голосов
/ 22 мая 2018

Я новичок в C #, пожалуйста, объясните, как анализировать этот JSON.Мне нужно перебрать внутренние массивы, чтобы извлечь некоторые данные.JSON:

{
    "p": [{
        "p": [{
            "p": "Get in ",
            "f": [],
            "t": "t"
        },
        {
            "p": "test",
            "t": "lb",
            "id": "Make"
        },
        ....

например требуется доступ к словарю "{" p ":" Получить "," f ": []," t ":" t "}" Выполните следующие действия:

Dictionary<string, object> result = JsonConvert.DeserializeObject<Dictionary<string, object>>(bodyString);
List<Dictionary<string, object>> itemsArray = result["p"] as List<Dictionary<string, object>>;

foreach(var itemInfo in itemsArray)
{

}

Но itemsArray равен нулю.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Если вы десериализуете в качестве словаря строку-объект, объектами будут JArray, Jobject или JToken.{var result = JsonConvert.DeserializeObject> (json);

            Console.WriteLine((result["p"]).GetType().Name);
        }

Будет выводить 'JArray'.

Вы можете работать с JArray и т. д. или указать всю желаемую структуру:

        {
            var result = JsonConvert.DeserializeObject<Dictionary<string, List<Dictionary<string,List<Dictionary<string,object>>>>>>(json);

            Console.Write((result["p"]).GetType().Name);
            var itemsArray = result["p"];
            var item = result["p"][0]["p"][0];

            foreach(var entry in item)
                Console.WriteLine(entry.Key + " = " + entry.Value);
        }
0 голосов
/ 22 мая 2018

Если вы создадите модель для соответствия данным, вам не придется беспокоиться о проблемах с несколькими уровнями десериализации словаря.

void Main()
{
    var json = @"{
   ""p"":[
      {
         ""p"":[
            {
               ""p"":""Get in "",
               ""f"":[

               ],
               ""t"":""t""
            },
            {
               ""p"":""test"",
               ""t"":""lb"",
               ""id"":""Make""
            }
         ]
      }
   ]
}";

    var data = JsonConvert.DeserializeObject<ItemCollection>(json);
}

public class ItemCollection
{
    public ItemGroup[] p { get; set; }
}

public class ItemGroup
{
    public Item[] p { get; set; }
}

public class Item
{
    public string p { get; set; }
    public string t { get; set; }
    public string id { get; set; }
    public string[] f { get; set; }
}
...