Pobieranie nazwy / klucza JToken za pomocą JSON.net

82

Mam trochę JSON, który wygląda tak

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

Parsuję to jako JArray:

var array = JArray.Parse(json);

Następnie wykonuję pętlę nad tablicą:

foreach (var content in array)
{

}

content jest JToken

Jak mogę odzyskać „nazwę” lub „klucz” każdego elementu?

Na przykład „MobileSiteContent” lub „PageContent”

Alex
źródło

Odpowiedzi:

130

JTokenjest klasą bazową dla JObject, JArray, JProperty, JValue, itd. Można użyć Children<T>()metody, aby uzyskać przefiltrowaną listę dzieciom JToken że są pewnego rodzaju, na przykład JObject. Każdy JObjectma kolekcję JPropertyobiektów, do których można uzyskać dostęp za pomocą Properties()metody. Za każdego JPropertymożesz go dostać Name. (Oczywiście możesz również uzyskać w Valuerazie potrzeby, co jest innym JToken.)

Łącząc to wszystko mamy:

JArray array = JArray.Parse(json);

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

Wynik:

MobileSiteContent
PageContent
Brian Rogers
źródło
24
JObject obj = JObject.Parse(json);
var attributes = obj["parent"]["child"]...["your desired element"].ToList<JToken>(); 

foreach (JToken attribute in attributes)
{   
    JProperty jProperty = attribute.ToObject<JProperty>();
    string propertyName = jProperty.Name;
}
Priyanka Lad
źródło
23

Domyślnym iteratorem dla JObject jest słownik iterujący po parach klucz / wartość.

JObject obj = JObject.Parse(response);
foreach (var pair in obj) {
    Console.WriteLine (pair.Key);
}
Brandin Perry
źródło