基于jObject.Parse的Linq-适用于控制台应用程序,但不适用于WebApi项目



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

编辑

解析和生成我的"sections"的方法实际上在一个单独的程序集中。

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

您确定在两个项目之间使用相同的版本吗?Path属性已在Json.NET 5.0版本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。在左侧窗格中,单击"Installed packages"(已安装的软件包(。在中央窗格中,单击Json.Net。然后,安装的版本应在右侧窗格中可见,例如5.0.8。如果你需要更新,你也可以在NuGet中轻松完成。只需单击左侧窗格中的"更新",再次选择中间窗格中的Json.Net,然后单击"更新"按钮。请记住,每个项目都有自己单独的已安装NuGet包列表,因此,如果您更新一个项目中的包,则不会自动更新同一解决方案中的其他项目。您需要分别检查每个项目。

相关内容

  • 没有找到相关文章

最新更新