以下一直讓我有些瘋狂。我發現了一些類似的問題,但他們沒有提供解決方案。我試圖發佈一個包含幾個數據項的json對象。其中之一是對象本身的列表。這裏是:發佈json到mvc 4 WebApi控制器操作。爲什麼不反序列化我的數組?
{
"ClaimType":"Trade",
"ClaimedProductId":"4",
"ClaimingUserId":"2",
"Message":"test",
"TradeOffers":[
{
"OfferedProductId":"7",
"OfferedQuantity":"5"
},
{
"OfferedProductId":"12",
"OfferedQuantity":"2"
}
]
}
這json驗證。
我的控制器看起來是這樣的:
public class ProductController : ApiController
{
[HttpPost]
public void Claim(ClaimViewModel claimViewModel)
{
//do some amazing stuff with the data from the viewmodel.
//sorry guys. This stuff is just tooo cool to be posted here for all to see
//NOT ;-)
}
}
我張貼看起來像這樣ClaimViewModel:
public class ClaimViewModel
{
public Claim.ClaimRequestTypes ClaimType { get; set; }
public int ClaimedProductId { get; set; }
public int ClaimingUserId { get; set; }
public string Message { get; set; }
public List<TradeOffer> TradeOffers { get; set; }
}
爲了完整起見,這裏的TradeOffer類:
public class TradeOffer
{
int OfferedProductId { get; set; }
int OfferedQuantity { get; set; }
}
之前我盯着從Javascript發佈,我喜歡使用Chrome RestConsole來測試這個壞男孩,所以我可以在罩下看起來更好一些。我做以下設置的請求:
- 其POST請求
- 主體內容類型是「應用/ JSON」
- 我發送JSON作爲RAW身體
接下來會發生什麼情況:我的ClaimViewModel
上的所有屬性都會反序列化。但是,TradeOffers
屬性得到實例化,並且在調試時顯示列表的計數爲2(迄今爲止這麼好),但此列表中的對象(屬性OfferedProductId
和OfferedQuantity
)的值始終爲0 /零(非空!)
在您的JSON上,數組的字段名稱爲'TradeOffer';在你的類定義中它是'TradeOffers'。試着讓它們一樣,看看它是否有幫助。 – carlosfigueira
如果您使用的是jquery,請嘗試在您的請求中設置「traditional:true」。 MVC不喜歡規範(或者我應該責怪它在m $) –