我相信我们可以通过 3 种方式达到预期的效果
方法 1 - 使用 Jint 的内置解析器
Jint 有内置的解析器来支持javascriptJSON.parse
和JSON.stringify
函数。我们可以将它们用于此任务:
var engine =new Engine();
var json = @"{
""CONTRATE"": 0,
""SALINC"": 0,
""RETAGE"": 55.34,
""MARSTATUS"": ""single"",
""SPOUSEDOB"": ""1970-01-01"",
""VIEWOPTION"": ""pension""
}";
var input = new JsonParser(engine).Parse(json);
var result= engine
.SetValue("input", input)
.Execute("input.CONTRATE > 50 && input.SALINC < 50 && input.RETAGE > 50")
.GetCompletionValue().AsBoolean();
方法 2 - 使用 3rdParty Json 序列化程序
Jint 接受 POCO 对象作为输入,因此我们可以首先将 json 转换为 POCO,然后将其提供给 Jint 以获取结果(对于本示例,我使用 Json.net 作为反序列化器)
var input = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
var result= engine
.SetValue("input", input)
.Execute("input.CONTRATE > 50 && input.SALINC < 50 && input.RETAGE > 50")
.GetCompletionValue().AsBoolean();
方法 3 - 将 JSON 对象放入评估脚本
或者正如 Mr.Ros(Jint 的作者)建议的那样,我们可以将 JSON 对象和条件放在同一个脚本中,并将其传递给 Jint 进行评估。
var engine = new Engine();
var js = @"
input={
""CONTRATE"": 0,
""SALINC"": 0,
""RETAGE"": 55.34,
""MARSTATUS"": ""single"",
""SPOUSEDOB"": ""1970-01-01"",
""VIEWOPTION"": ""pension""
};
input.CONTRATE > 50 && input.SALINC < 50 && input.RETAGE > 50;";
var result = engine
.Execute(js)
.GetCompletionValue().AsBoolean();