【发布时间】:2017-06-08 23:09:34
【问题描述】:
以下代码在将 JSON.NET 库升级到 v10 后突然抛出错误的原因可能是什么:
var name = json.Value<string>("Name"); // Error: Object must implement IConvertible
如果我将行更改为索引器语法,错误就会消失:
var name = (string)json["Name"];
令人费解的一点是,前一行过去在库的 v6 上可以正常工作,但在升级到 v10 后就失败了。
我还检测到 null 比较的不同行为,我也怀疑这是由升级引起的:
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 之间是否存在重大变化?如果不是,还有什么可能导致我的问题(尤其是第一个问题)?
【问题讨论】:
-
当时的值是多少?
-
您可以在此处查看每个版本的更改:github.com/JamesNK/Newtonsoft.Json/releases
-
@Patrick:我必须复制第一次发现问题时涉及的确切数据集并在调试器下运行它。有问题的值是 System.Guid 类型。这个没有实现 IConvertible,所以除非 JSON.NET v6 对 Guids 做了不同的事情,否则这在以前是行不通的。
-
Json.NET 在版本 5、6 和 7 之间对 GUID 的自动识别做了一些改变;例如见stackoverflow.com/a/30384841/3744182