Obtener el nombre / clave de un JToken con JSON.net

82

Tengo un JSON que se parece a esto

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

Analizo esto como un JArray:

var array = JArray.Parse(json);

Luego, recorro la matriz:

foreach (var content in array)
{

}

content es un JToken

¿Cómo puedo recuperar el "nombre" o la "clave" de cada artículo?

Por ejemplo, "MobileSiteContent" o "PageContent"

Alex
fuente

Respuestas:

129

JTokenes la clase base para JObject, JArray, JProperty, JValue, etc Usted puede utilizar el Children<T>()método para obtener una lista filtrada de los hijos de un JToken que son de un tipo determinado, por ejemplo JObject. Cada uno JObjecttiene una colección de JPropertyobjetos, a los que se puede acceder a través del Properties()método. Para cada uno JProperty, puede obtener su Name. (Por supuesto, también puede obtener el Valuesi lo desea, que es otro JToken).

Poniéndolo todo junto tenemos:

JArray array = JArray.Parse(json);

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

Salida:

MobileSiteContent
PageContent
Brian Rogers
fuente
23
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
fuente
22

El iterador predeterminado para JObject es un diccionario que itera sobre pares clave / valor.

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