c# - 我的 Web API C#.net 服务器无法反序列化 JSON 对象

标签 c# json asp.net-web-api2

这是我的客户端代码

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,然后添加:“”。这不是我想要的。

最佳答案

你的代码有几个问题:

  1. 反序列化是区分大小写的,所以JS端的属性必须和服务端的属性大小写一致
  2. 您需要直接将 person 对象作为参数传递,而不是作为对象的 person 属性包含在内
  3. 虽然通常不会有什么坏处,但您不需要对对象进行字符串化。 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/

相关文章:

f# - 部署到IIS应用程序时升级FSharp.Core版本,程序集引用错误

c# - Windows 7 中的鼠标移动 - 左键单击并拖动

java - @jsonignore 在 spring mvc 中没有按预期工作

javascript - React 中的 JSON 对象解析问题

c# - 无法在 web api Controller 中命中断点

asp.net - 来自 .NET Web API 的 Google OAuth2

c# - Windows 2004 更新后无法以其他用户身份运行 EXCEL.EXE

c# - C# 中的委托(delegate)定义

c# - 跳跃和记住跳跃时间的问题

javascript - 将 JSON 对象转换为响应对象