2011-07-21 75 views
2

我一直在環顧四周,我還沒有找到解決方案。如果我有一些嵌套對象的JSON發佈到我的控制器,我怎麼才能讓它正確綁定到對象。我的代碼完美適用於任何沒有任何形式嵌套的對象。解決方案,有誰?與MVC3嵌套的JSON

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

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

回答

1

應該是完美的與,只要服務器知道該類型的嵌套對象的反序列化...

如果您使用的是JsonValueProviderFactory爲MVC3你必須確保你JSONify數據你正在傳遞和使用適當的內容類型,如下所示...

對於調用$.ajax調用將對象傳遞給data時jQuery的默認行爲是爲該對象創建KVP,該對象可能更適合標準形式提交或querystring值,這就是爲什麼你必須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來標記對象。謝謝!

+0

您的解決方案應該是一個單獨的答案,如果是解決方案,您應該接受答案作爲解決方案。 – Kekoa