这是我的客户端代码
var sayeed = { firstname: "Sayeed", surname: "Alquiaty" };
alert(JSON.stringify({ person: sayeed }));
$.ajax({
url: "api/parent",
type: "POST",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ person: sayeed }),
success: function(response) {
response ? alert("It worked!") : alert("It didn't work.");
}
});
在服务器端
public class Person {
public string Firstname { get; set; }
public string Surname { get; set; }
}
//Here I am able to receive object but is is not FirstName = null and Surname = null
// POST api/parent
public bool PostParent(Person person) {
return person != null;
}
所以客户端得到一个成功的消息,但实际上 JSON 对象没有反序列化
我已经尝试过其他方法,比如使用 JObject,但这会破坏 Json 对象,我的意思是它将客户端对象转换为 Key,然后添加:“”。这不是我想要的。
最佳答案
你的代码有几个问题:
- 反序列化是区分大小写的,所以JS端的属性必须和服务端的属性大小写一致
- 您需要直接将 person 对象作为参数传递,而不是作为对象的
person
属性包含在内 - 虽然通常不会有什么坏处,但您不需要对对象进行字符串化。 jQuery
ajax
会自动为你完成
关于 1,您可以设置 Web API 序列化程序将服务器端的 PascalCase 转换为客户端的驼峰命名法,反之亦然,但是在客户端和服务器端之间转换属性名称时,您仍然需要考虑这一点:
var jsonformatter
= GlobalConfiguration.Configuration.Formatters.JsonFormatter;
jsonformatter.SerializerSettings.ContractResolver
= new CamelCasePropertyNamesContractResolver();
关于c# - 我的 Web API C#.net 服务器无法反序列化 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30015588/