jquery - MVC JavaScriptSerializer反序列化json

标签 jquery asp.net-mvc json deserialization

我有以下 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/

相关文章:

php - MySQL针对数据表的优化和查询优化

java - 将 JSON 映射到 POJO 时获取空值

javascript - jQuery UI 多对话框内容跳到顶部

javascript - 无法使用 document.getElementById 获取动态生成的单元格的值

json - 在终端中按列将任意输出转换为 json?

asp.net-mvc - 使用 MvcContrib Grid 之类的东西是否会导致代码可读性倒退?

asp.net-mvc - 使用 jQuery 检查 div 元素是否为空

javascript - 如何防止伪造的表单验证

jquery - 如何指定 $ ('a' ).click 事件以仅选择特定的 <a> 标签,而不是所有 <a> 标签?

c# - @Html.DisplayFor — 添加额外的纯文本