当javascript尝试解析包含从C#发送的列表的对象时,CefSharp崩溃

我正在使用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);

适合我

上一篇:WebKit应用程序开发的起因


下一篇:cefsharp webBrowser Javascript 打开winForm界面