1

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

这是返回给我的控制器的 json 字符串

[{\"Item1\":\"1|2|3|5\",\"Item2\":\"1\"}]

这是行不通的。当我运行这段代码时,我得到了一个空对象。但是,如果我对 json 字符串进行替换并删除 [ 和 ],它将使用正确的数据反序列化。

我是否处理不正确 - 我想反序列化到我的对象而不必修改 json 字符串。

任何想法都会很棒。谢谢。

4

1 回答 1

3

JSON.stringify(items)将序列化为一个数组,因为items是一个数组。您可能想要的是:

var jsonModel = {
  "Item1":$("myvalue").val(),      
  "Item2":$("myvalue2").val()      
};

....

{
    'items': JSON.stringify(jsonModel)
}

我在这里所做的一切都没有使用items数组。

唯一需要注意的是,如果您确实想要将这些对象的数组发送回您的控制器。如果是这种情况,您的反序列化代码将需要看起来像

js.Deserialize<IEnumerable<JsonModel>>(items);

当然,您需要像以前一样发回一个序列化数组。

于 2012-10-10T00:28:32.453 回答