2

我正在使用 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 的引用
4

1 回答 1

2

你确定你在两个项目之间使用相同的版本吗?该Path属性已添加到JTokenJson.NET 5.0 release 1中。如果您在其中一个项目中使用版本 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 包列表,因此如果在一个项目中更新包,则不会自动更新同一解决方案中的其他项目。您需要分别检查每个项目。

于 2013-11-04T18:47:29.160 回答