javascript 尝试解析包含从 C# 发送的列表的对象时 CefSharp 崩溃
CefSharp crashing when javascript tries to parse an object containing a list sent from C#
我正在使用 CefSharp 在 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"
};
导致崩溃的对象:
TestClass tc = new TestClass()
{
name = "Bobby Test",
other = "Hello",
ints = new List<int>(){0,1}
};
我是如何传给js代码的:
browser.RegisterJsObject("testObj", tc);
我的angular代码设置使用:
$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 简单类型(数组、数字、字符串等)
我通常在服务器端对任何复杂数据做的是return一个JSON字符串:
JavaScriptSerializer().Serialize(myObject);
然后在客户端使用
重构它
JSON.parse(myObjectAsString);
适合我
我正在使用 CefSharp 在 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"
};
导致崩溃的对象:
TestClass tc = new TestClass()
{
name = "Bobby Test",
other = "Hello",
ints = new List<int>(){0,1}
};
我是如何传给js代码的:
browser.RegisterJsObject("testObj", tc);
我的angular代码设置使用:
$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 简单类型(数组、数字、字符串等)
我通常在服务器端对任何复杂数据做的是return一个JSON字符串:
JavaScriptSerializer().Serialize(myObject);
然后在客户端使用
重构它JSON.parse(myObjectAsString);
适合我