我正在使用CefSharp让webbrowser在winforms应用程序中运行angularjs代码.
我能够将c#对象发送到js端,然后如果它们只包含字符串,整数等,则使用它们.但是当我尝试发送一个包含值列表的对象时,CefSharp在js端尝试解析它时会崩溃.
c#代码的一个例子:
public class TestClass
{
public string name { get; set; }
public string other { get; set; }
public List<int> ints { get; set; }
}
工作对象:
TestClass tc = new TestClass()
{
name = "Bobby Test",
other = "Hello"
};
Obj造成崩溃:
TestClass tc = new TestClass()
{
name = "Bobby Test",
other = "Hello",
ints = new List<int>(){0,1}
};
我如何传递给js代码:
browser.RegisterJsObject("testObj", tc);
我的角度代码设置使用:
$scope.$watch(function ()
{ return window.testObj },
function () {
$scope.someField = window.testObj;
});
我尝试在传递它之前在对象上做一个JsonConvert.SerializeObject,但它最终只是在js一侧是一个空对象.
编辑 – 解决方案
C#到JS:
将TestClass更改为:
TestClass tc = new TestClass()
{
name = "Bobby Test",
other = "Hello",
ints = new int[] {0,1}
};
并且它可以正确使用上面的代码,而无需直接调用任何序列化或反序列化方法.
JS到C#:
虽然这不是我的问题:
我将一个对象传递给js端,并使用c#的回调函数,回调函数接受来自js端的序列化字符串,然后我在c#端反序列化.
解决方法:
Chromium只能处理javascript简单类型(数组,数字,字符串等)
我通常在服务器端使用任何复杂数据执行的操作是返回JSON字符串:
JavaScriptSerializer().Serialize(myObject);
然后在客户端使用重新构建它
JSON.parse(myObjectAsString);
适合我