我有一组 JavaScript 命令,例如doc.page == 5
,并且我正在使用JINT在我的 C# 应用程序中执行脚本。
但是,在我的 C# 代码中,doc
是一个Dictionary<string, object>
. 因此,我不能以这种方式使用点符号。
我当前的解决方案非常低效:我转换doc
为 JSON 字符串,并将其添加到我的脚本中。它Dictionary
非常大,所以这比执行简单命令的开销要大得多。这是一些示例代码:
// Some example data:
var command = "doc.page < 5 || doc.tax < 10 || doc.efile";
var doc = new Dictionary<string, object>(){
{"page", 5},
{"tax", 10},
{"efile", true},
// ... etc ...
};
// Execute the command:
// Convert Dictionary to JSON:
var jsonDoc = new StringBuilder();
jsonDoc.Append("var doc = {");
var first = true;
foreach (var kv in doc) {
if (!first) {
jsonDoc.Append(",");
}
first = false;
jsonDoc.AppendFormat("{0}: {1}", kv.Key, kv.Value);
}
jsonDoc.Append("};");
var je = new JintEngine();
je.Run(jsonDoc.ToString());
var result = je.Run(command);
return result;
有没有办法更有效地做到这一点?