在将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之间是否有重大变化?如果没有,还有什么可能导致我的问题(特别是第一个)?
答案 0 :(得分:0)
事实证明,有问题的值是类型JToken
的{{1}}。我目前无法验证这在JSON.NET v6中是否确实有效,但在我看来,Guid
方法执行转换为JToken.Value<T>()
的方式与将T
实例直接转换为{{ 1}}。我现在还不知道这是JSON.NET中的错误还是仅仅需要记住的问题。
可悲的是,我对第二个问题的解释并不接近,因为我还没有可复制的案例。