我一直在四处寻找,到目前为止我还没有找到解决方案。如果我有一些JSON与我发布到控制器的嵌套对象,我怎么能让它正确绑定到对象。我的代码适用于任何没有任何嵌套形式的对象。解决方案,任何人?
var object = { "RandomString": "ASDFASDF" };
var nestedobject = { "AnotherString": "ASDFASDF", "Object": object };
$.ajax({
type: 'POST',
url: 'Controller/Method',
data: nestedobject,
dataType: 'json',
success: callback
});
答案 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
标记对象。谢谢!