在JINT中从Javascript回调传递JSON

时间:2016-11-08 08:01:50

标签: c# json jint

我有一个库,允许开发人员通过JavaScript扩展业务规则触发器。基本上有一个函数允许开发人员(在JavaScript中)订阅一个事件并将一个委托作为“当发生这种情况时给我打电话”。

我能够成功完成此操作,但是当函数尝试将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#变量“result”可以有一个JsValue或其他包含数据的对象,但是该方法抛出异常:必须在最后一行实现IConvertable。

我可以验证“callback”是否设置为适当类型的委托:Jint.Native.JsValue lambda_method(System.Runtime.CompilerServices.Closure,System.String)}

如果我传回NULL,我就没有问题。我确定有一些小小的(一旦我搞清楚了,就会丢掉一块)...

1 个答案:

答案 0 :(得分:0)

JsValue更改为System.Dynamic.ExpandoObject。这将是result的类型,也可以安全地转换为IDictionary<string, object>