我创建了一个“Person”ADO.Net实体模型,并从中“搭建”了一个Web API控制器。实体模型是嵌套的,其中包含其他对象的数组。
因为这些嵌套对象包含引用其父级的属性,所以它们不可序列化。所以我创建了一个“JSON_Person”类,我可以将Person对象及其嵌套属性复制到(减去嵌套对象对其父项的引用),以便可以使用GET方法检索它们。
到目前为止,一切都按预期工作。我可以对API执行GET请求并获取一个JSON对象数组,每个对象都有自己的嵌套对象数组。我也可以对API执行PUT请求并更新记录。
即使PUT方法接受“Person”对象而不是“JSON_Person”,它也可以,因为(我假设)JSON_Person和Person的属性匹配为1比1.
但是,在将参数类型从Person更改为JSON_Person之后,API中的参数现在始终显示为null。
我被告知这可能是“类型转换失败”但我似乎不太可能,因为即使获取对象然后将其保持不变,它仍然会失败。
我尝试过的事情:
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");
}
});
放置方法
[ResponseType(typeof(void))]
public IHttpActionResult PutPerson(int id, JSON_Person json_Person)
{
// Convert JSON_Person back to Person and do other stuffs...
}
答案 0 :(得分:1)
事实证明,这根本不是PUT方法的问题。我创建了一个部分类Person,将一个构造函数添加到接受JSON_Person的类中(以帮助将JSON_Person转换回Person)但没有空白构造函数。
添加一个不带参数的构造函数后,它就可以了!
public JSON_Person() { }