以下は私を少し夢中にさせています。同様の問題がいくつか見つかりましたが、解決策はありませんでした。いくつかのデータ項目を含む json オブジェクトを投稿しようとしています。それらの 1 つは、オブジェクト自体のリストです。ここにあります:
{
"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リクエスト
- BODY コンテンツ タイプは「application/json」です。
- RAW Body の Request Payload として json を送信します
次に、何が起こるかを示します。私のすべてのプロパティは、ClaimViewModel
適切かつ簡単に逆シリアル化されます。ただし、TradeOffers
プロパティはインスタンス化され、デバッグ時にカウントが 2 のリストが表示されますが (これまでのところ良好です)、このリスト内のオブジェクトの値 (プロパティOfferedProductId
とOfferedQuantity
) は常に 0/0 (null ではありません!) です。