关于我的问题:JSON。
从JProperty Value…中获取jobobject我阅读了链接并消化了上面的评论和建议。现在我想知道:为什么没有"直接"(即简单)的方法将JProperty对象的Value转换为jobobject ?获得一个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对象的令人信服的理由是什么?
根据标准,JSON由以下五种类型的令牌构建:
- object:一个无序的名称/值对集合。
- array:一个有序的值集合。
-
value:一个带双引号的字符串,或者一个数字,或者
true
、false
、null
,或者一个对象、一个数组。这些结构可以嵌套。字符串 - 。
JToken
是一个抽象基类,它表示这些可能的标记中的任何一个。如果您有一些JSON并且事先不知道其中可能包含的内容,则可以使用JToken.Parse()
对其进行解析并获得结果,只要JSON格式良好。如果根JSON令牌不是预期的类型,JObject.Parse()
和JArray.Parse()
将抛出。并且没有JValue.Parse()
来解析JSON字符串,您知道它表示"原子"值,在这种情况下需要使用JToken.Parse()
。
JToken.FromObject()
可以用来序列化任何类型的c#对象到JToken
层次结构,而不需要事先知道结果的JSON类型。这在编写泛型序列化相关代码时非常有用。