MVC 4 プロジェクトで、JSON データを API コントローラーにポストする際に問題が発生しています。これが私のJavaScriptです:
self.saveInvestment = function () {
var investmentdata = ko.mapping.toJSON( { "InvestmentSummary": self.InvestmentSummary } );
$.ajax({
url: "../api/investment/",
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: investmentdata,
success: function () {
alert('hi');
}
});
};
これが私のコントローラーコードです:
[HttpPost]
public void Post([FromBody]InvestmentSummary val)
{
string blah;
if (val.InvestmentDetails[0] != null)
blah = val.InvestmentDetails[0].Cost.ToString();
}
フィドラーからのヘッダー情報は次のとおりです。
application/json; charset=UTF-8
http://localhost:1961
http://localhost:1961/Investment
X-Requested-With: XMLHttpRequest
POST http://localhost:1961/api/investment/ HTTP/1.1
Host: localhost:1961
Connection: keep-alive
Content-Length: 2470
Origin: http://localhost:1961
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
Content-Type: application/json; charset=UTF-8
Accept: */*
Referer: http://localhost:1961/Investment
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
{"InvestmentSummary":{"InvestmentDetails":[{"Cost":"11","FairValue":0,"Tranches":[{"IDTranche":null.......
JSON は適切にフォーマットされており、JSON Lint で再確認しました。アプリケーションをデバッグすると、コントローラーで「val」にデータがありません。私は何を間違っていますか?? ありがとう!
編集:これが私のInvestmentSummaryのクラス定義です:
public class InvestmentSummary : TransactionSummary
{
public InvestmentSummary()
{
this.InvestmentDetails = new List<InvestmentDetail>();
}
public List<InvestmentDetail> InvestmentDetails { get; set; }
}
私の問題は、JSON が InvestmentDetails を使用しているのに、クラス名が InvestmentDetail であることだと思いますか? 誰でも、助けてください?ありがとう
2 番目の編集* 私の完全な JSON は次の構造になっています。
var init = {
InvestmentSummary: {
InvestmentDetails: [],
IDTransactionSummary:null,
TxnParameter: {},
TxnDate: "",
Fund: {},
PortfolioCompany: {}
}
};
tpeczek の助けを借りて、InvestmentDetails を読み取ることができました。しかし、残りの JSON を取得するにはどうすればよいでしょうか? 私の JavaScript では、JSON は適切に構築されていますが、コントローラーに到達すると、InvestmentDetails のみが表示されます。InvestmentSummary の他のすべての子はなくなりました。ありがとう