JSON.NET: Obtain JObject from JProperty Value

笑着哭i 提交于 2019-12-12 12:14:27

问题


I'm stuck on something:

I deserialized a JSON file using JObject.Load:

// get the JSON into an object 
JObject jsonObject = JObject.Load(new
  JsonTextReader(new StreamReader("mydoc.json")));

Fine. I now have a populate jsonObject.

Now I iterate through its properties like this:

foreach (JProperty jsonRootProperty in jsonObject.Properties())
  {    
    if (jsonRootProperty.Name=="Hotel")
    {
      ... !!! I just want a JObject here...
    }
  }

Once I find a property with a Name equal to "Hotel", I want that property's value as a JObject. The catch is that the Hotel property name might be a single value (say, a string), or it might be a JSON object or a JSON array.

How can I get the property's value into a JObject variable so that I can pass it to another function that accepts a JObject parameter?


回答1:


Get the Value of the JProperty, which is a JToken, and look at its Type. This property will tell you if the token is an Object, Array, String, etc. If the token type is Object, then you can simply cast it to a JObject and pass it to your function. If the token type is something other than Object and your function has to have a JObject, then you'll need to wrap the value in a JObject in order to make it work.

foreach (JProperty jsonRootProperty in jsonObject.Properties())
{    
    if (jsonRootProperty.Name=="Hotel")
    {
        JToken value = jsonRootProperty.Value;
        if (value.Type == JTokenType.Object)
        {
            FunctionThatAcceptsJObject((JObject)value);
        }
        else
        {
            FunctionThatAcceptsJObject(new JObject(new JProperty("value", value)));
        }
    }
}


来源:https://stackoverflow.com/questions/38207050/json-net-obtain-jobject-from-jproperty-value

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!