2012-10-09 45 views
1

,我有以下的jQuery -MVC JavaScriptSerializer反序列化JSON

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字符串。

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

回答

3

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

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

.... 

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

所有我真的在这里做不使用items阵列。

唯一的警告是如果你确实想要将这些对象的数组发回给你的控制器。如果是这样的话你的反序列化的代码将需要看起来像

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

,当然你需要发送一个序列化数组回来,你做之前。

+0

谢谢 - 我知道它必须是我忽略的简单东西。 – czuroski

相关问题