【问题标题】:How to convert JValue to JObject如何将 JValue 转换为 JObject
【发布时间】:2019-08-06 10:32:09
【问题描述】:

我使用 newtonsoft api 已经有一段时间了。 从术语的角度来看,当你调用一个属性的值时你会得到一个JValue 是有意义的。但是,如果它是 JObject,我是否继续处理该值?我想出的唯一方法就是喊:JObject.Parse(JValue.ToString())

演员表会触发InvalidCastException

我希望有人能给我一个如何处理嵌套JObjects的例子。

【问题讨论】:

  • 一个 JValue 不能是 JObject - 一个不能从另一个继承。 JSON.net 中的属性是字符串/JToken 对。所以你可能会取回一个 JToken? JToken 是 JValue 和 JObject 的共同祖先。
  • 您可能会受益于this answer,它描述了JToken 层次结构。

标签: c# json.net


【解决方案1】:

如果你看一下 JObject 的 API

https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Linq_JObject.htm

您可以看到,当您访问一个属性时,它会返回一个 JToken,而不是一个 JValue。

JToken 是 JValue 和 JObject 的共同祖先,因此您只需在检查它是哪个后进行转换(例如,使用 is 运算符)。请注意,它也可以是 JArray(既不是 JValue 也不是 JObject)。

【讨论】:

  • 查看观察窗口,我得到的是 JValue 而不是 JToken。
  • 我假设告诉你返回类型是 JToken 但实例类型是 JValue 是可能的。但是,如果该属性实际上是一个 JObject,那么您将得到“Newtonsoft ... JToken (Newtonsoft ... JObject)”。当查看监视窗口时,您显然看到的是实际实例,而不是签名。只是您不能直接从 JValue 转换为 JObject。如您在链接的 API 文档中所见,属性值访问器返回一个 JToken。所以抓住它,确定它的真正含义,然后向上投射。
猜你喜欢
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 2013-07-08
  • 2017-08-08
  • 2013-09-19
  • 1970-01-01
相关资源
最近更新 更多