我有一个库,允许开发人员通过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,我就没有问题。我确定有一些小小的(一旦我搞清楚了,就会丢掉一块)...
答案 0 :(得分:0)
将JsValue
更改为System.Dynamic.ExpandoObject
。这将是result
的类型,也可以安全地转换为IDictionary<string, object>
。