我一直在四处寻找,到目前为止我还没有找到解决方案。如果我有一些带有嵌套对象的 JSON 发布到我的 Controller ,我怎样才能让它正确绑定(bind)到对象。我的代码非常适用于没有任何嵌套形式的任何对象。解决方案,有人吗?
var object = { "RandomString": "ASDFASDF" };
var nestedobject = { "AnotherString": "ASDFASDF", "Object": object };
$.ajax({
type: 'POST',
url: 'Controller/Method',
data: nestedobject,
dataType: 'json',
success: callback
});
最佳答案
只要服务器知道类型,嵌套对象的反序列化应该是完美的......
如果您使用 MVC3 的 JsonValueProviderFactory
,您必须确保对您传递的数据进行 JSONify 化,并使用如下所示的适当内容类型...
当为 $.ajax
调用将对象传递给 data
时,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 应该正确反序列化参数并映射到 Controller 操作签名,如下所示。
public ActionResult Method(string AnotherString, SomeType SomeObject) { /* ... */ }
public class SomeType {
public string RandomString {get;set;}
}
解决方案
为了完整起见,我想把它放在这里。我使用了他给我的代码,但主要问题是我需要用 SerializableAttribute
标记对象。谢谢!
关于javascript - 使用 MVC3 嵌套 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6779987/