在将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中的一个错误还是仅仅需要记住的陷阱。
可悲的是,我对第二个问题的解释还不太接近,因为我还没有可再现的情况。