3

以下は私を少し夢中にさせています。同様の問題がいくつか見つかりましたが、解決策はありませんでした。いくつかのデータ項目を含む 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 のリストが表示されますが (これまでのところ良好です)、このリスト内のオブジェクトの値 (プロパティOfferedProductIdOfferedQuantity) は常に 0/0 (null ではありません!) です。

4

2 に答える 2

7

クラスのプロパティTradeOfferはプライベート (C# の既定のアクセス修飾子) であるため、外部から設定することはできません。それらを作ってみてくださいpublic

public class TradeOffer
{
    public int OfferedProductId { get; set; }
    public int OfferedQuantity { get; set; }
}
于 2013-07-17T13:56:43.680 に答える
1

TradeOffer のプロパティは本当に非公開ですか? もしそうなら、それらは公開する必要があります。

加えて、

public List<TradeOffer> TradeOffers { get; set; }

する必要があります

public List<TradeOffer> TradeOffer { get; set; }

または、JSON コレクションで名前を複数形に変更する必要があります

于 2013-07-17T13:56:14.297 に答える