【问题标题】:JSON.NET: Why Use JToken--ever?JSON.NET:为什么要使用 JToken——永远?
【发布时间】:2016-11-07 18:42:55
【问题描述】:

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

我阅读了链接并消化了上述 cmets 和建议。现在我想知道:为什么没有“直接”(即简单)方法将 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 对象的令人信服的理由是什么?

【问题讨论】:

  • JToken 表示 JSON 文件中的任何可能的标记。如果你有一些 JSON 并且事先不知道里面可能是什么,你可以用 JToken.Parse() 解析它,只要 JSON 是有效的就可以得到结果。如果根 JSON 令牌不是预期的类型,JObject.Parse()JArray.Parse()JValue.Parse() 将抛出。
  • 为了完善您原本出色的总结,JSON 令牌到底是什么(我对 JSON 还是个新手)?
  • 来自JSON standard(这真的很简单),它将是一个对象、数组、值、字符串或数字。
  • 请以某种方式移动您的评论以回答,以便我给予您信任。谢谢!

标签: json.net


【解决方案1】:

standard开始,JSON 是由以下五种令牌构建而成的:

  • object:一组无序的名称/值对。
  • 数组:值的有序集合。
  • :双引号中的字符串,或数字,或truefalsenull,或对象或数组。这些结构可以嵌套。
  • 字符串
  • 数字

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

同样,JToken.FromObject() 可用于将任何类型的 c# 对象序列化为 JToken 层次结构,而无需事先知道生成的 JSON 类型。这可能很有用,例如在编写通用序列化相关代码时。

【讨论】:

  • 我在你引用的 JSON 标准中没有看到 token 的定义。如果一个值是一个token的超集(token or true or false or null),我们在解析JSON时为什么要关心token呢?
  • @AlanEvangelista - Newtonsoft 和json.org 之间的术语似乎不一致。 json.org 使用“值”来表示任何类型的 JSON。 Newtonsoft 使用JValue 表示原始值(true/false/null/string/number),使用“token”表示任何类型的 JSON。
猜你喜欢
  • 1970-01-01
  • 2014-09-03
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
  • 2015-12-06
相关资源
最近更新 更多