将JSON.NET升级到v10后,调用JObject.Value <string>会抛出InvalidCastException

时间:2017-06-08 14:12:36

标签: c# json.net

在将JSON.NET库升级到v10后,以下代码突然抛出错误的原因可能是:

var name = json.Value<string>("Name"); // Error: Object must implement IConvertible

如果我将行更改为索引器语法,则错误消失:

var name = (string)json["Name"];

令人费解的是,前一行曾经与库的v6完美配合,但在升级到v10后失败了。

我也检测到了一种不同的空比较行为,我也怀疑它是由升级引起的:

if (json["Name"] != null)
{
    // I find myself in here because JTokenType.Null was unexpectedly returned above.
    // This wasn't the case in v6!
}

在Newtonsoft.Json库的v6和v10之间是否有重大变化?如果没有,还有什么可能导致我的问题(特别是第一个)?

1 个答案:

答案 0 :(得分:0)

事实证明,有问题的值是类型JToken的{​​{1}}。我目前无法验证这在JSON.NET v6中是否确实有效,但在我看来,Guid方法执行转换为JToken.Value<T>()的方式与将T实例直接转换为{{ 1}}。我现在还不知道这是JSON.NET中的错误还是仅仅需要记住的问题。

可悲的是,我对第二个问题的解释并不接近,因为我还没有可复制的案例。