另一个选择是将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