【发布时间】:2016-08-17 15:21:15
【问题描述】:
我正在创建 JObject 列表,如下所示。我想使用查询表达式搜索集合。在下面的示例代码中,我使用 Jsonpath 查询来查找类型为 Buy 的所有位置对象(枚举 Buy 的 int 值为 1 )
List<JObject> list = new List<JObject>();
list.Add(JObject.FromObject(new Position() { PositionType = PositionType.Buy, Investment = new Investment() { InvestmentCode = "AAPL" } }));
list.Add(JObject.FromObject(new Position() { PositionType = PositionType.Sell, Investment = new Investment() { InvestmentCode = "AAPL" } }));
var x = list.Find(j =>
{
JToken token = j.SelectToken("$[?(@.PositionType == 1)]");
return token != null;
});
SelectToken 方法在谓词中返回 null。我不确定我是否使用了正确的方法。有没有一种方法可以在对象上评估谓词?
【问题讨论】:
-
var x = list.Find(j => j.SelectToken("$[?(@.PositionType == 1)]"));这应该是行,但是,你可能应该做一些更像list.Where(j => j["PositionType"] != null).First(j => j["PositionType"] == 1) -
如果您已经将它作为 .NET 类型,为什么不直接对集合执行 LINQ 查询呢?为什么要先转换成 JObject?
-
我提供了上面的示例作为示例。我的意图是构建一个动态 Json 对象存储,并让调用者使用 json 路径提供过滤器。图书馆不会知道类型。
标签: c# json linq json.net jsonpath