2016-03-30 29 views
0

私はここでウィットの終わりです。私はもう一組の目が必要だと思う。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" 
} 
非直列化オブジェクトの最初 Quickwatch of Deserialized Object

クイックウォッチ私は、それぞれのIdsと遅延のためintTimeSpanを持っていた、そしてそれらが正しくデシリアライズされませんでした。だから私はそれらをすべて文字列に変更しましたが、それでも正しく非直列化されていません。

私は間違っているか紛失していますか?

編集:すべての属性の組み合わせを試した後、私は最終的にそれをFiddler Composerに貼り付けることにしました。そして、それは動作します。だから私のJavaScriptで何かをオフにする必要があります。

+0

「正しくデシリアライズしない」とはどういう意味ですか?どのような行動を観察していますか? –

+0

すべてのカスタム 'JsonProperty'属性を削除し、APIシグニチャで' [FromBody] ApiRequest request'を使用してみます。何が起こっているのかを理解するだけです... –

+0

また、あなたの問題を引き起こしているかどうかは確かに言えませんが、なぜなら、Javascript配列からそれを逆シリアル化しているので、ReportIdsはICollectionまたはIListにはなりません怠惰な反復はありません。 –

答えて

1

速記jQueryのpost()方法は、それがapplication/json; charset=UTF-8

に設定することが必要なとき、私はChromeでネットワークトラフィックを見ることによって発見され、これに私のjavascriptを変更することにより、application/x-www-form-urlencoded; charset=UTF-8への要求にContent-Type属性を設定したことが判明 answer

関連する問題