嵌套JSON与MVC3

时间:2011-07-21 17:12:03

标签: javascript json asp.net-mvc-3

我一直在四处寻找,到目前为止我还没有找到解决方案。如果我有一些JSON与我发布到控制器的嵌套对象,我怎么能让它正确绑定到对象。我的代码适用于任何没有任何嵌套形式的对象。解决方案,任何人?

var object = { "RandomString": "ASDFASDF" };
var nestedobject = { "AnotherString": "ASDFASDF", "Object": object };

$.ajax({
  type: 'POST',
  url: 'Controller/Method',
  data: nestedobject,
  dataType: 'json',
  success: callback
});

1 个答案:

答案 0 :(得分:1)

只要服务器知道类型,它就应该是嵌套对象反序列化的完美...

如果您使用JsonValueProviderFactory用于MVC3,您必须确保JSONify您传递的数据并使用适当的内容类型,如下所示...

将对象传递给data进行$.ajax调用时,jQuery的默认行为是为对象创建KVP,这可能更适合标准表单提交或查询字符串值,即为什么你必须JSON.stringify数据。

var o = { "RandomString": "ASDFASDF" };
var nestedobject = { "AnotherString": "ASDFASDF", "SomeObject": o };

$.ajax({
  type: 'POST',
  url: 'Controller/Method',
  data: JSON.stringify(nestedobject),
  dataType: 'json',
  contentType: 'application/json; charset=utf-8',
  success: callback
});

使用它,JsonValueProviderFactory应该正确地反序列化参数并映射到控制器动作签名,如下所示。

public ActionResult Method(string AnotherString, SomeType SomeObject) { /* ... */ }

public class SomeType { 
    public string RandomString {get;set;}
}

解决方案

为了完整起见,我想把它放在这里。我使用了他给我的代码,但主要问题是我需要使用SerializableAttribute标记对象。谢谢!