Get the name of a JObject in Json.Net
c#, json.net, linq
Solution
In JSON, objects themselves do not have names. An object is just a container for a collection of name-value pairs, beginning and ending with curly braces. So what you have above is a fragment of a larger body of JSON. There must be an outer object to contain it. That outer object has a property with a name of `Info`, and the value of that property is the object you are referring to.
{
"Info":
{
"View":"A",
"Product":"B",
"Offer":"Offer1",
"Demo":"body {background-color:red;} #box {border:dotted 50px red;}",
"Log":false
}
}
In Json.Net, a `JObject` models a JSON object, and a `JProperty` models a name-value pair contained within a `JObject`. Each `JObject` has a collection of `JProperties` which are its children, while each `JProperty` has a `Name` and a single child, its `Value`.
So, assuming you have a reference to the innermost `JObject` (containing the `View`, `Product` and `Offer` properties), you can get the name of its containing `JProperty` like this:
JProperty parentProp = (JProperty)jObject.Parent;
string name = parentProp.Name; // "Info"
Problem
I have a `JObject` equal to: ``` "Info": { "View":"A", "Product":"B", "Offer":"Offer1", "Demo":"body {background-color:red;} #box {border:dotted 50px red;}", "Log":false } ``` How can I return the name of the object, "Info"? I am currently using the `Path` property like so: ``` jObject.Name = jObject.Path.Substring(jObject.Path.jObject('.') + 1); ``` Is there a better way to do this?