【发布时间】:2017-06-28 22:50:36
【问题描述】:
我正在尝试使用 Json.NET 和 System.Linq.Dynamic 将复杂的 json 对象与用户定义的过滤器/谓词进行匹配。这是我的代码:
var json = @"{""Name"":""Jane Doe"",""Occupation"":""FBI Consultant""}";
dynamic person = JObject.Parse(json);
var people = new[] { person };
var isMatch = people.Where("Name=@0", "Jane Doe").Any();
Console.WriteLine(isMatch);
这给了我一个与Where-statement 相关的错误:
“对象”类型中不存在属性或字段“名称”
如果我改用匿名对象,通过用这个替换第二行,它可以正常工作:
var person = new { Name = "Jane Doe", Occupation = "FBI Consultant"};
是否有另一种反序列化 json 字符串的方法,可以让我通过字符串谓词查询它以检查 json 对象是否匹配?
EDIT:json-string 和 Where-statement 是动态的,由用户提供。有很多属性,在执行代码之前我不知道它们的名称。字段名称和值均由用户提供。
【问题讨论】:
-
SelectToken使用通配符*运算符可能会满足您的需求。见Searching for a specific JToken by name in a JObject hierarchy。
标签: c# linq json.net linq-to-objects dynamic-linq