C# 调用JObject.Value<;字符串>;将JSON.NET升级到v10后引发InvalidCastException

C# 调用JObject.Value<;字符串>;将JSON.NET升级到v10后引发InvalidCastException,c#,json.net,C#,Json.net,将JSON.NET库升级到v10后,以下代码突然抛出错误的原因可能是什么: var name = json.Value<string>("Name"); // Error: Object must implement IConvertible 令人费解的是,前一行过去在库的v6中工作得非常好,但升级到v10后失败了 我还检测到一种不同的空比较行为,我还怀疑这是由升级引起的: if (json["Name"] != null) { // I find myself in he

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

var name = json.Value<string>("Name"); // Error: Object must implement IConvertible
令人费解的是,前一行过去在库的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之间是否有突破性的变化?如果不是,还有什么可能导致我的问题(特别是第一个问题)?

结果表明,有问题的值是
JToken
,类型为
Guid
。我目前无法验证这在JSON.NETV6中是否确实起到了不同的作用,但在我看来,
JToken.Value()
方法执行到
t
的转换与直接将
JToken
实例类型转换到
t
不同。我现在也不知道这是JSON.NET中的一个bug,还是需要记住的一个简单的问题


遗憾的是,我没有更接近于第二个问题的解释,因为我还没有一个可复制的案例。

事实证明,有问题的值是
JToken
类型
Guid
。我目前无法验证这在JSON.NETV6中是否确实起到了不同的作用,但在我看来,
JToken.Value()
方法执行到
t
的转换与直接将
JToken
实例类型转换到
t
不同。我现在也不知道这是JSON.NET中的一个bug,还是需要记住的一个简单的问题


遗憾的是,我对第二个问题的解释还不太清楚,因为我还没有一个可复制的案例。

当时的值是多少?你可以在这里查看每个版本的更改:@Patrick:我必须复制问题第一次被发现时所涉及的确切数据集,并在调试器下运行它。所讨论的值为System.Guid类型。这一个没有实现IConvertible,所以这以前不可能工作,除非JSON.NET的v6对GUID做了不同的处理。JSON.NET在版本5、6和7之间对GUI的自动识别做了一些更改;例如,查看当时的值是多少?您可以在此处查看每个版本的更改:@Patrick:我必须复制问题第一次被发现时所涉及的确切数据集,并在调试器下运行它。所讨论的值为System.Guid类型。这一个没有实现IConvertible,所以这以前不可能工作,除非JSON.NET的v6对GUID做了不同的处理。JSON.NET在版本5、6和7之间对GUI的自动识别做了一些更改;例如,见
if (json["Name"] != null)
{
    // I find myself in here because JTokenType.Null was unexpectedly returned above.
    // This wasn't the case in v6!
}