2016-07-05 49 views
1

获取JObject我卡上的东西:JSON.NET:从JProperty价值

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

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

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

现在,我通过它的属性重复这样的:

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

一旦我找到了物业与等于名称“酒店”,我想,作为一个JObject属性的值。问题在于Hotel属性名称可能是单个值(比如字符串),也可能是JSON对象或JSON数组。

我怎样才能得到属性值到一个JObject变量,以便我可以将它传递给接受JObject参数的另一个函数?

回答

3

获取JPropertyValue,这是JToken,并查看其Type。该属性会告诉你,如果令牌是一个对象,数组,字符串等。如果令牌类型是对象,那么你可以简单地将它转换为JObject并将它传递给你的函数。如果令牌类型不是Object,并且您的函数必须具有JObject,那么您需要将值包装在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))); 
     } 
    } 
} 
+0

(非主题,但我很崇拜你,你对JSON.NET的知识,并愿意分享它 - 谢谢你的回复)。看起来不错,但你能解释更多关于“将值包装在JObject中”吗?我浪费了很多小时,如何将JToken变成JObject,显然我错过了JTokens和JObjects如何相互关联...... – Jazimov

+0

[此答案]的第一部分(http://stackoverflow.com/q/38005957/10263)可能会帮助你。它讲述了JToken,JObject等如何相关。感谢您的客气话。 –

+0

太棒了!该链接看起来像是一个额外信息的宝库。那么,沿着你的回答,我应该设置正确的道路来跳过这些最终的JSON.NET障碍! – Jazimov