我正在使用Json.Net来解析从api返回的json。
我有一个控制台应用程序和一个WebApi应用程序,它们正在执行完全相同的例程:
var jObject = JObject.Parse(json);
var sections = jObject
.Values()
.Select(x => x.Path)
.ToList();
在控制台应用程序中,此工作正常,sections
与预期一致。
当在我的WebApi控制器中执行相同的代码时,抛出以下异常:
找不到方法:'System.String Newtonsoft.Json.Linq.JToken.get_Path()'。
json
的值在两种情况下都相同!
修改
解析和生成“部分”的方法实际上是在一个单独的程序集中。
答案 0 :(得分:2)
您确定在两个项目之间使用相同的版本吗? Path
属性已添加到Json.NET 5.0 release 1中的JToken
。如果您在其中一个项目中使用版本4.5.x,则此属性将无法使用。请注意,从4.5开始,所有版本的Json.NET都具有4.5.0.0的程序集版本,包括5.0.x版本。程序集版本是Visual Studio中“属性”窗口中显示的内容。所以,如果你正在查看它,你可能会使用不正确的信息。要确定您实际使用的是哪个版本,需要找到每个项目引用的Newtonsoft.Json.dll并检查其属性。它应该类似于5.0.8.16617
,例如,如果你是最新的。
如果您正在使用NuGet,您还可以从那里查看已安装的版本。对于每个项目,请打开包管理器UI。在左侧窗格中,单击"已安装的软件包"。在中心窗格中,单击Json.Net。然后,应在右侧窗格中显示已安装的版本,例如5.0.8。如果您需要更新,您也可以在NuGet中轻松完成。只需点击"更新"在左窗格中,再次在中心窗格中选择Json.Net,然后单击“更新”按钮。请记住,每个项目都有自己单独的已安装NuGet包列表,因此,如果您在一个项目中更新包,则不会自动更新同一解决方案中的其他项目。您需要单独检查每个项目。