如何用C#验证JSON/C#对象是否符合SQL过滤条件?
问题解答
可用的C#库推荐
- System.Linq.Dynamic.Core:支持将类SQL条件表达式转换为LINQ表达式,可直接对C#对象做验证。只需先把JSON反序列化为C#对象(强类型或动态类型均可),再用
DynamicExpressionParser.ParseLambda方法解析条件表达式,执行后即可得到是否匹配的结果。 - FastExpressionCompiler:可配合LINQ动态库使用,提升表达式编译性能,适合高频次验证的场景。
无库依赖的最优实现方案
如果不想引入第三方库,可按以下步骤实现:
- 解析条件表达式
- 处理表达式语法,拆分出逻辑运算符(AND/OR)、比较运算符(=、!=、>、<等)、字段路径和目标值。可以用正则表达式匹配元素,或手写递归下降解析器处理括号嵌套的逻辑结构。比如先拆分示例中的
(A AND B) OR C结构,再分别解析A、B、C的具体规则。
- 处理表达式语法,拆分出逻辑运算符(AND/OR)、比较运算符(=、!=、>、<等)、字段路径和目标值。可以用正则表达式匹配元素,或手写递归下降解析器处理括号嵌套的逻辑结构。比如先拆分示例中的
- 提取字段值
- 针对JSON:用
Newtonsoft.Json或System.Text.Json的JObject,按字段路径提取值,比如JObject.Parse(json)["profile"]["country"].ToString()。 - 针对C#对象:通过反射或表达式树,根据
profile.country这类路径递归获取属性值。
- 针对JSON:用
- 执行条件判断
- 根据解析出的比较运算符,对提取的字段值和目标值做类型转换后比较,再结合AND/OR逻辑运算符组合最终结果。注意处理字符串、数值等不同类型的比较逻辑,以及空值场景。
内容的提问来源于stack exchange,提问作者Yaniv Levy
相关产品推荐
相关产品推荐

