Как разобрать Json для получения значений

Mathis Panzani спросил: 07 октября 2018 в 01:01 в: c#

Это формат Json из Imgur API, использующий поиск по галерее (сильно упрощенный, что еще важно)

{
   "data":[
  {
     "id":"q33FYFh",
     "is_album":true,
     "images":[
        {
           "id":"ObcYQRc",
           "link":"https:\/\/i.imgur.com\/ObcYQRc.jpg",
           "is_album":false
        },
        {
           "id":"ifB0uac",
           "link":"https:\/\/i.imgur.com\/ifB0uac.jpg",
           "is_album":false
        }
     ]
  },
  {
     "id":"jYInL3c",
     "is_album":true,
     "images":[
        {
           "id":"bq2L5C4",
           "link":"https:\/\/i.imgur.com\/bq2L5C4.jpg",
           "is_album":false
        },
        {
           "id":"Z0OPngk",
           "link":"https:\/\/i.imgur.com\/Z0OPngk.jpg",
           "is_album":false
        }
     ]
  },
  {
     "id":"8xxM5TO",
     "link":"https:\/\/i.imgur.com\/8xxM5TO.jpg",
     "is_album":false
  }
   ],
   "success":true,
   "status":200
}

Мне нужен способ получить все идентификаторы изображений, а не ID альбома, вы можете определить, является ли элемент альбомом или изображением, посмотрев на тег "is_album"

Итак, сначала я попытался по крайней мере получить доступ к подполю "id" в поле "images":

using Newtonsoft.Json;
string response = "Change this with the json file above"
dynamic dynJson = JsonConvert.DeserializeObject(response);
foreach (var data in dynJson)
{
            string id = data["images"]["id"].ToString();
            Debug.WriteLine(id);
}

Это дало мне эту ошибку: (Кстати, мне нужно использовать Debug.WriteLine, потому что Console не работает в коде PCL в Xamarin.Forms)

System.InvalidOperationException: Невозможно получить доступ к дочернему значению в Newtonsoft.Json.Linq.JProperty.

Но даже если это сработает, он не получит идентификаторы для изображений, которые не являются частью альбома.

с использованием псевдокода это то, что я хотел бы (я думаю):

for each (item in myjson)
{
  if (item.is_album == "false")
  {
      Console.write(item.id);
  }
  else
  {
       for each (image in element)
       {
           Console.write(image.id);
       }
  }
}

0 ответов