Подтвердить что ты не робот

Получение имени/ключа JToken с помощью JSON.net

У меня есть JSON, который выглядит как

[
  {
    "MobileSiteContent": {
      "Culture": "en_au",
      "Key": [
        "NameOfKey1"
      ]
    }
  },
  {
    "PageContent": {
      "Culture": "en_au",
      "Page": [
        "about-us/"
      ]
    }
  }
]

Я анализирую это как JArray:

var array = JArray.Parse(json);

Затем я петлю по массиву:

foreach (var content in array)
{

}

content является JToken

Как я могу получить "имя" или "ключ" каждого элемента?

Например, "MobileSiteContent" или "PageContent"

4b9b3361

Ответ 1

JToken - базовый класс для JObject, JArray, JProperty, JValue и т.д. Вы можете использовать метод Children<T>() для получения отфильтрованного списка дочерних JToken, которые имеют определенного типа, например JObject. Каждый JObject имеет набор объектов JProperty, к которым можно получить доступ с помощью метода Properties(). Для каждого JProperty вы можете получить его Name. (Конечно, вы также можете получить Value, если хотите, а это еще один JToken.)

Объединяя все это, мы имеем:

JArray array = JArray.Parse(json);

foreach (JObject content in array.Children<JObject>())
{
    foreach (JProperty prop in content.Properties())
    {
        Console.WriteLine(prop.Name);
    }
}

Вывод:

MobileSiteContent
PageContent

Ответ 2

Итератор по умолчанию для JObject - это словарь, который выполняет итерацию по парам ключ/значение.

JObject obj = JObject.Parse(response);
foreach (var pair in obj) {
    Console.WriteLine (pair.Key);
}