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