JSON.NET:从JProperty Value获取JObject

Jaz*_*mov 4 json.net

我被困在某事上:

我使用JObject.Load反序列化了一个JSON文件:

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

精细.我现在有一个填充jsonObject.

现在我遍历它的属性,如下所示:

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

一旦我找到名称等于"Hotel"的属性,我希望该属性的值为JObject.问题是酒店属性名称可能是单个值(例如,字符串),或者它可能是JSON对象或JSON数组.

如何将属性的值转换为JObject变量,以便将其传递给另一个接受JObject参数的函数?

Bri*_*ers 8

获取ValueJProperty,这是一个JToken,看它Type.此属性将告诉您令牌是否为Object,Array,String等.如果令牌类型为Object,则可以将其简单地转换为a JObject并将其传递给您的函数.如果令牌类型不是Object而你的函数必须有a JObject,那么你需要将值包装在a JObject中以使其工作.

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)));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)