2016-07-05 176 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字符串。

相关问题