C# 调用JObject.Value<;字符串>;将JSON.NET升级到v10后引发InvalidCastException
将JSON.NET库升级到v10后,以下代码突然抛出错误的原因可能是什么: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
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!
}