【问题标题】:Deserialize javascript array on c#在c#上反序列化javascript数组
【发布时间】: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


【解决方案1】:

看看 JsonConvert.DeserializeObject 它是一个 Newtonsoft 库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2012-12-23
    • 2012-12-12
    • 2012-04-10
    • 2017-01-18
    • 1970-01-01
    相关资源
    最近更新 更多