私はここでウィットの終わりです。私はもう一組の目が必要だと思う。WebApiが正しくデシリアライズされない
メソッドシグネチャ:
public async Task<IHttpActionResult> Post(ApiRequest request)
モデル:
[SuppressMessage("ReSharper", "CollectionNeverUpdated.Global")]
[SuppressMessage("ReSharper", "AutoPropertyCanBeMadeGetOnly.Global")]
public class ApiRequest
{
[JsonProperty("allowLoadingToDataWarehouse")]
public bool AllowLoadingToDataWarehouse { get; set; }
[JsonProperty("initialDelay")]
public string InitialDelay { get; set; }
[JsonProperty("reportIds")]
public IEnumerable<string> ReportIds { get; set; }
[JsonProperty("reportTypeDelay")]
public string ReportTypeDelay { get; set; }
[JsonProperty("runType")]
[JsonConverter(typeof(StringEnumConverter))]
public ReportRunType RunType { get; set; }
[JsonProperty("userId")]
public string UserId { get; set; }
[JsonProperty("wwDelay")]
public string WWDelay { get; set; }
[JsonProperty("weeks")]
public IEnumerable<string> Weeks { get; set; }
}
Javascriptを:
var submitReportRequest = {
userId: userid,
reportIds: reportids,
runType: 'Custom',
weeks: selectedweeks,
initialDelay: $('#InitialDelay').val(),
reportTypeDelay: $('#ReportTypeDelay').val(),
wwDelay: $('#WWDelay').val(),
allowLoadingToDataWarehouse: $('#AllowLoadingToDataWarehouse').val()
};
$.post("/api/SubmitReport", JSON.stringify(submitReportRequest), function (data) {
alert('success');
});
直列化されたJSONはJavaScriptからの投稿:
{
"userId": "30",
"reportIds": [
"59",
"60",
"61",
"62",
"63",
"64"
],
"runType": "Custom",
"weeks": [
"201409",
"201410",
"201411",
"201412"
],
"initialDelay": "00:00:00",
"reportTypeDelay": "00:00:00",
"wwDelay": "00:00:00"
}
非直列化オブジェクトの最初
の
クイックウォッチ私は、それぞれのIdsと遅延のためint
とTimeSpan
を持っていた、そしてそれらが正しくデシリアライズされませんでした。だから私はそれらをすべて文字列に変更しましたが、それでも正しく非直列化されていません。
私は間違っているか紛失していますか?
編集:すべての属性の組み合わせを試した後、私は最終的にそれをFiddler Composerに貼り付けることにしました。そして、それは動作します。だから私のJavaScriptで何かをオフにする必要があります。
「正しくデシリアライズしない」とはどういう意味ですか?どのような行動を観察していますか? –
すべてのカスタム 'JsonProperty'属性を削除し、APIシグニチャで' [FromBody] ApiRequest request'を使用してみます。何が起こっているのかを理解するだけです... –
また、あなたの問題を引き起こしているかどうかは確かに言えませんが、なぜなら、Javascript配列からそれを逆シリアル化しているので、ReportIdsはICollectionまたはIListにはなりません怠惰な反復はありません。 –