2016-04-14 51 views
0

我已經創建了一個「Person」ADO.Net實體模型,並從中「搭建」了一個Web API控制器。實體模型是嵌套的,其中包含其他對象的數組。WebAPI參數null

因爲這些嵌套對象包含一個引用它們父對象的屬性,所以它們不可序列化。所以我創建了一個「JSON_Person」類,我可以將Person對象及其嵌套屬性複製到(減去嵌套對象對其父項的引用),以便可以使用GET方法檢索它們。

直到這一點,一切都按預期工作。我可以對API執行GET請求並獲取一組JSON對象,每個JSON對象都有自己的嵌套對象數組。我也可以對API執行PUT請求並更新記錄。

即使PUT方法接受一個「人」的對象,而不是一個「JSON_Person」,它的工作原理是因爲(我認爲)的JSON_Person和人的屬性匹配1比1

但是,更改參數後從Person類型到JSON_Person,API中的參數現在總是顯示爲空。

我被告知這可能是一個「類型轉換失敗」,但它似乎不太可能,因爲即使GET對象,然後把它回到原來的不變,它仍然失敗。

事情我已經嘗試:

  1. 添加[FromBody]將API參數。
  2. 在jQuery.ajax調用中更改「contentType:'application/json; charset = utf-8'」。
  3. 在發送到測試類型轉換之前,將所有屬性設置爲空。

AJAX調用

$.ajax({ 
    type: "PUT", 
    url: "/api/person/" + selected.Id, 
    data: JSON.stringify(selected), 
    contentType: 'application/json; charset=utf-8', 
    success: function() {}, 
    error: function() { 
     return alert("error"); 
    } 
}); 

put方法

[ResponseType(typeof(void))] 
public IHttpActionResult PutPerson(int id, JSON_Person json_Person) 
{ 
    // Convert JSON_Person back to Person and do other stuffs... 
} 
+0

您是否檢查過'ModelState.Errors'屬性? –

+0

我沒有看到ModelState的錯誤屬性。 – Austneal

回答

1

原來這是不是與PUT方法在所有問題。我創建了一個部分類Person來爲接受JSON_Person的類添加一個構造函數(以幫助將JSON_Person轉換回Person),但沒有空白構造函數。

添加一個不帶參數的構造函數後,它工作!

public JSON_Person() { }