我有以下 jquery -
var items = new Array();
items.push({
"Item1":$("myvalue").val(),
"Item2":$("myvalue2").val()
});
....
data: {
'items': JSON.stringify(items)
},
....
使用以下反序列化代码 -
var js = new JavaScriptSerializer();
var myobj = js.Deserialize<JsonModel>(items);
到以下对象 -
public class JsonModel
{
public string Item1 { get; set; }
public string Item2 { get; set; }
}
这是返回到我的 Controller 的 json 字符串
[{\"Item1\":\"1|2|3|5\",\"Item2\":\"1\"}]
这不起作用。当我运行这段代码时,我最终得到一个空对象。 但是,如果我对 json 字符串进行替换并删除 [ 和 ],它就会使用正确的数据进行反序列化。
我是否错误地处理了这个问题 - 我想反序列化到我的对象而不必修改 json 字符串。
任何想法都会很棒。谢谢。
最佳答案
JSON.stringify(items)
将序列化为数组,因为 items
是一个数组。您可能想要的是:
var jsonModel = {
"Item1":$("myvalue").val(),
"Item2":$("myvalue2").val()
};
....
{
'items': JSON.stringify(jsonModel)
}
我在这里所做的一切都没有使用 items
数组。
唯一需要注意的是,如果您确实想要将这些对象的数组发送回 Controller 。如果是这种情况,您的反序列化代码将需要类似于
js.Deserialize<IEnumerable<JsonModel>>(items);
当然,您需要像以前一样发回一个序列化数组。
关于jquery - MVC JavaScriptSerializer反序列化json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12809691/