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

Asg*_*ard 5 javascript c# angularjs 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; } 
}
Run Code Online (Sandbox Code Playgroud)

工作对象:

TestClass tc = new TestClass()
{
    name = "Bobby Test",
    other = "Hello"
};
Run Code Online (Sandbox Code Playgroud)

Obj造成崩溃:

TestClass tc = new TestClass()
{
    name = "Bobby Test",
    other = "Hello",
    ints = new List<int>(){0,1}
};
Run Code Online (Sandbox Code Playgroud)

我如何传递给js代码:

browser.RegisterJsObject("testObj", tc);
Run Code Online (Sandbox Code Playgroud)

我的角度代码设置使用:

$scope.$watch(function ()
{ return window.testObj },
function () {
    $scope.someField = window.testObj;
});
Run Code Online (Sandbox Code Playgroud)

我尝试在传递它之前在对象上做一个JsonConvert.SerializeObject,但它最终只是在js一侧是一个空对象.

编辑 - 解决方案

C#到JS:

将TestClass更改为:

TestClass tc = new TestClass()
{
    name = "Bobby Test",
    other = "Hello",
    ints = new int[] {0,1}
};
Run Code Online (Sandbox Code Playgroud)

并且它可以正确使用上面的代码,而无需直接调用任何序列化或反序列化方法.

JS到C#:

虽然这不是我的问题:

我将一个对象传递给js端,并使用c#的回调函数,回调函数接受来自js端的序列化字符串,然后我在c#端反序列化.

小智 4

Chromium 只能处理 javascript 简单类型(数组、数字、字符串等)

我通常在服务器端处理任何复杂数据时返回一个 JSON 字符串:

JavaScriptSerializer().Serialize(myObject);
Run Code Online (Sandbox Code Playgroud)

然后在客户端使用

JSON.parse(myObjectAsString);
Run Code Online (Sandbox Code Playgroud)

对我有用