原文地址:https://stackoverflow.com/questions/38558844/jcontainer-jobject-jtoken-and-linq-confusion/38560188#38560188?newreg=577582085c60496db7bdb78be26a2313
JToken的層次結構是這樣的:
JToken -抽象基類
JContainer - 能夠包含其它JToken的JToken抽象基類
JArray - 表示一個JSON數組(包含一個有序的List<JToken>)
JObeject - 表示一個JSON對象(包含一個IEnumerable<JProperty>)
JProperty - 表示一個JSON屬性(在JObject中是一個name/JToken鍵值對)
JValue - 表示一個原生JSON值(string,number,boolean,null)
以下是幾條基本的經驗法則:
- 如果是一個對象(在JSON里是有大括號“{”和“}”來標識的),就用JObject。
- 如果是一個數組或集合(用中括號“[”和“]”標識的),就用JArray。
- 如果是原生值,就用JValue。
- 如果你不知道你的json是什么類型的token,或者你希望用一種通用的方式來處理上面任意一種類型的對象,就用JToken,然后你可以檢查它的Type屬性來決定是哪種類型的token,並把它轉化成相應的類型。