2013-11-04 55 views
2

我使用Json.Net来解析从api返回的json。Linq over jObject.Parse - 用于控制台应用程序,但不适用于WebApi项目

我有一个控制台应用程序和应用程序的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的值在两种情况下都是相同的!

EDIT

,它解析并生成我的“部分”实际上是在一个单独的组件的方法。

  • 类库有参考Newtonsoft.Json v 4.5.0.0
  • 的WebAPI项目具有参考Newtonsoft.Json v 4.5.0.0
  • 控制台应用程序不必Newtonsoft.Json
  • 参考
+0

听起来像你的'Newtonsoft.Json'程序集的版本在你的项目中有所不同。请检查这个。 – user2674389

+0

@ user2674389看到我的编辑,两个使用相同的版本(我应该包括在原来的帖子!) – Alex

回答

2

您确定您在两个项目之间使用相同的版本吗? Path财产被添加到JTokenJson.NET 5.0 release 1。如果您在其中一个项目中使用版本4.5.x,则此属性将不可用。请注意,Json.NET自4.5版以来的所有版本都有一个程序集版本(包括5.0.x版本)。程序集版本是在Visual Studio的“属性”窗口中显示的内容。所以,如果你正在看这个,你可能使用了不正确的信息。要确定您真正使用的版本,您需要找到每个项目正在引用的Newtonsoft.Json.dll并检查其属性。例如,如果你是最新的,它应该是5.0.8.16617

如果你使用的是NuGet,你也可以从那里看到安装的版本。对于每个项目,打开包管理器UI。在左侧窗格中,单击“已安装的软件包”。在中间窗格中,单击Json.Net。然后,安装的版本应该在右窗格中可见,例如, 5.0.8。如果你需要更新,你也可以在NuGet中轻松完成。只需点击左侧窗格中的“更新”,再次在中心窗格中选择Json.Net,然后点击更新按钮。请记住,每个项目都有自己的已安装NuGet软件包的单独列表,因此如果您在一个项目中更新软件包,则不会自动更新同一解决方案中的其他项目。你需要分别检查每个项目。

+0

明天我会检查...使用Nuget(不知道这是否会有任何影响?) – Alex

+0

使用NuGet很好。很容易看到你正在使用哪个版本,并在必要时更新到最新版本。我已经用更多信息更新了我的答案。 –

+0

这是一个无赖的参考,就像你怀疑的一样。实际上是在一个没有被任何项目引用的项目中。在整个解决方案中更新到5.0.8(并从软件包文件夹中删除任何4.x的概念)并重建,修复了问题。谢谢 – Alex

相关问题