2016-07-05 52 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