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

CefSharp crashing when javascript tries to parse an object containing a list sent from C#

本文关键字:列表 对象 崩溃 CefSharp javascript 包含      更新时间:2023-09-26

我正在使用CefSharp让Web浏览器在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 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);

为我工作