当前位置: 首页 > 工具软件 > jtoken > 使用案例 >

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

濮君植
2023-12-01
得到这种方法没有发现错误需要一个罕见的因素组合。如果您没有看到它,那么随便忽略这篇博文。
如果您是最终用户,并且您收到此错误,请确保您的应用程序加载的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

 类似资料: