3つの方法で望ましい結果を達成できると信じています
方法 1 - Jint の組み込みパーサーを使用する
Jint には、javascriptをサポートする組み込みのパーサーJSON.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 - サードパーティの 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();