'Getting the name / key of a JToken with JSON.net

I have some JSON that looks like this

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

I parse this as a JArray:

var array = JArray.Parse(json);

Then, I loop over the array:

foreach (var content in array)
{

}

content is a JToken

How can I retrieve the "name" or "key" of each item?

For example, "MobileSiteContent" or "PageContent"



Solution 1:[1]

JObject obj = JObject.Parse(json);
var attributes = obj["parent"]["child"]...["your desired element"]; 

foreach (JProperty attributeProperty in attributes)
{
    var attribute = attributes[attributeProperty.Name];
    var my_data = attribute["your desired element"];
}

Solution 2:[2]

The default iterator for the JObject is as a dictionary iterating over key/value pairs.

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

Solution 3:[3]

If the JToken key name is unknown, and you only need the key's Value regardless of name, simply use the JToken.Values() method.

The below sample assumes the JToken value is a primitive type - first value found is extracted.
Solution can be extended to support Array values.

JToken fooToken = sourceData.

int someNum =  fooToken .Values<int?>().First() ?? 0;

int someString =  fooToken .Values<string>().First();

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 humbads
Solution 2 Kjuly
Solution 3 Peter O Brien