2016-07-05 345 views
4

作爲一個跟進我的問題在這裏: JSON.NET: Obtain JObject from JProperty Value ...JSON.NET:爲什麼使用JToken - 曾經?

我讀鏈接和消化上述意見和建議。現在我想知道:爲什麼沒有「直接」(即容易)將JProperty對象的值轉換爲JObject的方法是否有充分的理由?看起來有很多工作要去JToken,然後必須構建if語句等。這不是爲了抱怨額外的工作;相反,這是承認我仍然認爲我不明白JToken的真正目的。有一段時間,所有FedEx軟件包首先發送給Memphis:看起來,所有對象都可以/應該首先轉到JToken,然後將其分類到實際的目標對象類型。這是一種想法嗎?

換句話說,是有過一個很好的理由使用JToken - 或者只是有這麼多其他函數返回一個JToken,然後你必須只處理呢? JSON.NET手冊給出了將JToken轉換爲其他類型的方法(http://www.newtonsoft.com/json/help/html/Operators_T_Newtonsoft_Json_Linq_JToken.htm),但沒有提及從JToken轉到JObject ...

我發現JObject通常是我想要使用JSON並從JSON映射到我的.NET類並再次返回 - 以及執行一系列其他操作。我仍然想知道使用JToken對象有什麼強有力的理由?

+1

'JToken'代表在JSON文件中的任何可能的標記。如果你有一些JSON,並且事先不知道什麼可能在裏面,你可以用'JToken.Parse()'解析它,並且只要JSON有效就可以得到結果。如果根JSON令牌不是預期的類型,則會拋出'JObject.Parse()','JArray.Parse()'和'JValue.Parse()'。 – dbc

+0

爲了完善您的優秀總結,究竟是一個JSON令牌(我對於JSON還是一個新的)? – Jazimov

+1

從[JSON標準](http://www.json.org/)(這真的很簡單),它將是一個對象,數組,值,字符串或數字。 – dbc

回答

8

standard,JSON構建了以下五種類型的令牌的:

  • 對象:一組無序名稱/值對。
  • 陣列:值的有序集合。
  • :一個在雙引號或,或truefalsenull,或物體或陣列。這些結構可以嵌套。

JToken是一個抽象基類,表示這些可能的標記中的任何一個。如果你有一些JSON,並且事先不知道里面的內容,你可以用JToken.Parse()解析它,並且只要JSON有效就可以得到結果。如果根JSON令牌不是預期類型,則會拋出JObject.Parse()JArray.Parse()。而且也沒有JValue.Parse()解析你知道代表「原子」的價值,要求在這種情況下使用JToken.Parse()一個JSON字符串。