【发布时间】:2021-01-25 17:49:24
【问题描述】:
我正在尝试将 JSON 数组从 javascript 发送到 c#,但我总是在反序列化时出错。
首先我尝试序列化普通的 js 数组 JSON.stringify(order) 但在 c# 上我得到了
无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型“Order[]”,因为该类型需要 JSON 数组(例如 [1,2,3])才能正确反序列化。
Order[] order = JsonConvert.DeserializeObject<Order[]>(json); //this is line with error
之后我尝试将 js 数组转换为对象,然后序列化为 json
function toObject(arr) {
var rv = {};
for (var i = 0; i < arr.length; ++i)
rv[i] = arr[i];
return rv;
}
{"0":["Item1","2"],"1":["Item2","1"]} //JSON
这就是 JSON 现在的样子,但同样的错误。
【问题讨论】:
-
看起来您正在尝试反序列化对象而不是数组。你能展示一下用 toObject 函数转换 json 之前的样子吗?
-
看起来像这样:[["Item1","2"],["Item2","1"]]
-
所以你是从 javascript 数组中发送的。如果您希望 JsonConvert.DeserializeObject
(json) 将其反序列化为 Order[],则需要确保您正在发送对象数组,例如[{"Name":"Item1", "Id": 1},{"Name":"Item2","Id": 2}] -
你需要做类似
let ob = {}; ob['Name'] = "Item1"; ob['Amount'] = 1; order.push(ob)的事情。您需要记住,要序列化/反序列化的数据结构必须在 c# 和 javascript 中具有相同的字段(我猜 c# 中的 Order 类型具有字段“名称”和“金额”,您需要将其调整为您真正的有)
标签: javascript c# json