Linq over jObject.Parse - 适用于控制台应用程序但不适用于Web Api项目

时间:2013-11-04 16:01:48

标签: c# asp.net-web-api console-application json.net

我正在使用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的值在两种情况下都相同!

修改

解析和生成“部分”的方法实际上是在一个单独的程序集中。

  • 类库引用了Newtonsoft.Json v 4.5.0.0
  • WebApi项目引用了Newtonsoft.Json v 4.5.0.0
  • 控制台应用程序没有对Newtonsoft.Json的引用

1 个答案:

答案 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包列表,因此,如果您在一个项目中更新包,则不会自动更新同一解决方案中的其他项目。您需要单独检查每个项目。

相关问题