2016-11-08 77 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>