从JSON.NET DLL访问LinqBridge

时间:2011-07-11 05:07:31

标签: json.net linqbridge

我正在使用JSON.NET .dll合并的LinqBridge。LinqBridge允许从.NET 2访问Linq。如果我尝试使用Linq,即使在导入System.Linq之后,我收到以下错误:

Error   13  Could not find an implementation of the query pattern for source type 'int[]'.  'Where' not found.  Are you missing a reference to 'System.Core.dll' or a using directive for 'System.Linq'?    C:\Users\chrisl\Desktop\SoftTokens\Windows Desktop Soft-Token\Program.cs    27  25  WindowsSoftToken

如果我尝试包含LinqBridge,那么因为JSON.NET已经包含它,我收到此警告。另外,我已经两次包含相同的组件,效率很低:

Warning 2   The predefined type 'System.Action' is defined in multiple assemblies in the global alias; using definition from 'c:\Users\chrisl\Desktop\SoftTokens\Windows Desktop Soft-Token\libs\Newtonsoft.Json.Net20.dll' WindowsSoftToken

如果我在对象浏览器中浏览Newtonsoft.Json.Net20,我看到System.Linq显示为空,即使我选择了Show hidden types and methods

是否可以从JSON.NET dll访问Linq或禁止错误消息?

1 个答案:

答案 0 :(得分:6)

在LINQBridge程序集中提供LINQ查询运算符的Enumerable静态类仍然在System.Linq命名空间中公开。

您仍需要按照第一条错误消息中的指示使用System.Linq的using指令。

<强>更新

事实证明,合并到Newtonsoft.Json.Net20.dll的LINQBridge程序集已经“内化”,我最初没有注意到。这意味着您的代码无法引用编译器“实现查询模式”所需的Enumerable类型。所以你必须自己引用LINQBridge程序集,但是你会得到关于重复定义的警告。

您可以通过转到项目属性的“构建”选项卡来禁用重复的类警告,并在“抑制警告:”框中输入“1685”。

但最好的做法是从源代码构建自己的JSON.net版本而不在LINQBridge中合并。