找不到方法 newtonsoft.json.linq.JToken

得到这种方法没有发现错误需要一个罕见的因素组合。如果您没有看到它,那么随便忽略这篇博文。
如果您是最终用户,并且您收到此错误,请确保您的应用程序加载的Json.NET的版本是5.0.8。如果您的\ bin目录中有5.0.8,您仍然会收到此错误,然后检查GAC,并在必要时对其进行更新。
如果您是一个软件包作者,并且用户报告从代码中收到此错误,请降级软件包正在使用的Json.NET版本5.0.4,重新编译并发布新版本的软件包。如果您无法降级,则另一个选项是将IEnumerable <JToken>转换添加到错误的foreach循环中。
foreach(JToken item in(IEnumerable <JToken>)数组)
{
  // 东东
}

另一个选择是将foreach循环更改为for循环。

在Json.NET 5.0.5中,我将JArray.GetEnumerator的可见性从界面显式更改为public。 GetEnumerator的副作用是公共的是C#编译器将不再添加一个IEnumerable <JToken>转换为foreach循环。当GetEnumerator为显式接口时,必须使用该转换,并且只有当该对象被转换为IEnumerable <JToken>时才可访问。

然后,当具有JArray的foreach循环并且使用公共GetEnumerator编译的应用程序或程序包使用旧版本的Json.NET运行时,可能出现GAC中的GetEnumerator不是公共的可能性。因为没有转换为IEnumerable <JToken>,所以.NET找不到GetEnumerator方法,并抛出异常。

Json.NET 6.0长期修复

而不是让这个错误继续弹出用户,我将要将JArray.GetEnumerator的可见性更改为界面显式 - 在Json.NET 5.0.4及更早版本中具有的可见性。因为这是一个二进制的变化,我将把Json.NET的版本号增加到6.0。

更新:我已经将GetEnumerator作为public,并将Json.NET的程序集版本号更新为6.0.0.0。

原文博客参考:http://james.newtonking.com/archive/2013/11/29/fixing-jarray-getenumerator-method-not-found-bug

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值