2016-11-08 82 views
0

我有一個庫,它允許開發人員通過JavaScript擴展業務規則觸發器。基本上有一個函數允許開發人員(在JavaScript中)訂閱一個事件,並通過一個委託作爲「發生這種情況時給我打電話」。從JINT傳遞JSON回調JSON

我能夠成功地做到這一點,但是當函數試圖將JSON或JavaScript對象傳遞迴C#圖層時遇到了障礙。

基本上代碼的功能類似於這個單元測試:

Func<String, JsValue> callback = null; 
Func<Func<String, JsValue>, object> registerCallback = (o) => callback = o; 
Engine engine = new Engine() 
    .SetValue("registerCallback", registerCallback) 
    .Execute("registerCallback(function(parameter) { return { \"passed\": parameter }; });"); 
Assert.IsNotNull(callback); 
var result = callback("test"); 

我想它的C#變量「結果」可以具有JsValue或其中包含的數據但是所述方法引發異常一些其它物體:必須在最後一行執行IConvertable。

我可以確認「回調」設置爲相應類型的委託:Jint.Native.JsValue lambda_method(System.Runtime.CompilerServices.Closure,System.String)}

而且我沒有問題是否傳回NULL。我敢肯定,有一些微小的(headbang一旦我弄明白了)缺少一塊...

回答

0

更改JsValueSystem.Dynamic.ExpandoObject。這將是result的類型,它也可以安全地轉換爲IDictionary<string, object>