JSON.NET:为什么要使用JToken?

时间:2016-07-05 19:58:37

标签: json.net

作为我的问题的后续跟进: JSON.NET: Obtain JObject from JProperty Value ......

我阅读链接并消化了上述评论和建议。现在我想知道:有没有一个很好的理由为什么没有"直接" (即,简单)将JProperty对象的值转换为JObject的方法?到达一个JToken似乎需要做很多工作,然后必须构建if语句等。这不是抱怨额外的工作;相反,它承认我仍然认为我不了解JToken的真正目的。有一次,所有FedEx软件包首先被路由到孟菲斯:似乎所有对象都可以/应该首先转到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 个答案:

答案 0 :(得分:26)

standard开始,JSON由以下五种令牌构成:

  • object :一组无序的名称/值对。
  • array :有序的值集合。
  • value :带双引号的字符串,或数字,或truefalse或{ {1}},或对象或数组。这些结构可以嵌套。
  • 字符串

JToken是一个抽象基类,表示这些可能的标记中的任何一个。如果你有一些JSON并且事先不知道里面有什么,你可以用JToken.Parse()解析它并只要JSON有效就得到结果。如果根JSON令牌不是预期类型,则JObject.Parse()JArray.Parse()将抛出。并且没有JValue.Parse()来解析你知道代表" atomic"的JSON字符串。价值,要求在这种情况下使用null