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



在将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之间有什么破坏的变化?如果没有,还有什么可能导致我的问题(尤其是第一个问题(?

事实证明,有问题的值是Guid类型的JToken。我目前无法验证这在JSON.NET V6中的工作确实有所不同,但是在我看来,JToken.Value<T>()方法的转换为T的转换与将JToken实例直接键入T不同。我目前也无法分辨这是json.net中的一个错误还是仅仅需要记住的陷阱。

可悲的是,我对第二个问题的解释还不太接近,因为我还没有可再现的情况。

最新更新