2016-04-14 86 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() { }