所以我正在做的是收集一些数据,打开弹出窗口以允许用户进行一些额外的选择,然后关闭弹出窗口并将选择作为数组传回父窗口,然后发送所有这些信息关闭signalR后端进行处理。
问题是,在将数组从弹出窗口传回父窗口并将其发送到信号器后,信号器服务器会抱怨格式化。
[10:49:02 GMT-0400(东部夏令时)]
SignalR:dealshub.SubmitDealsToEngine无法执行。
错误:无法将当前JSON对象(例如{“name”:“value”})反序列化为类型'System.Collections.Generic.List`1 [System.String]',因为该类型需要JSON数组(例如[1,2,3])正确反序列化 要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是类似的集合类型可以从JSON对象反序列化的数组或List。
也可以将JsonObjectAttribute添加到类型中以强制它从JSON对象反序列化。 路径'0',第1行,第5位。
在visual studio中进一步检查调试后,我看到__proto_
和length
字段在传递到父窗口后消失,但是我放入数组的实际信息仍然存在。 / p>
目前我正在解决这个问题,只需在父窗口中创建一个新数组,然后将传递数组中的对象推送到它上面。这会关闭信号器并带回原始和长度字段。
想知道这里发生了什么变化,以及是否有办法让它正确通过。
答案 0 :(得分:0)
它看起来非常像here所描述的问题。 您可以通过向here所述的连接提供JSON序列化程序,或者通过我的答案中的任何其他方法来绕过此问题。
要使用自定义JSON序列化程序,请包含以下代码:
$.connection.hub.json = {
parse: function(text, reviver) {
console.log("Parsing JSON");
return window.JSON.parse(text, reviver);
},
stringify: function(value, replacer, space) {
return window.JSON.stringify(value, replacer, space);
}
};