doc.page == 5
과 같은 JavaScript 명령 집합이 있고 JINT을 사용하여 C# 응용 프로그램 내에서 스크립트를 실행하고 있습니다.Dictionary <string, object>가있는 JINT에서 "javascript dot notation"을 사용할 수 있습니까
그러나 내 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;
더 효율적으로 수행 할 수있는 방법이 있습니까?
'동적 인'사용자 정의 조회 ('사전'을 통해)를 이렇게 할 수 있습니까? 나는'동적'이 속성과 메소드를 평가하기 위해 리플렉션을 사용한다고 생각했으며,'Dictionary' 키는 속성이 아닙니다. –
@Scott, 직접적으로는 아니지만, 'ExpandoObject'가 매우 가깝습니다. 나는 '동적 인'형태로 사전을 포장하는 예를 들어보기 위해 노력할 것이다. – driis
또한이 질문에 대한 답변의 유효성에는 영향을 미치지 않지만 .NET 3.5에 대해서는 여기서 언급하지 않았습니다. 동적이지 않은 해결책을 알고 있다면 자유롭게 다른 대답을 추가하십시오! –