Asp.net mvc MVC将null反序列化为;空";(字符串)

Asp.net mvc MVC将null反序列化为;空";(字符串),asp.net-mvc,Asp.net Mvc,我通过$.ajax POST将对象从jQuery传递到MVC3控制器。在使用开发工具进行调试时,我可以看到分配给ajax数据属性的对象。对象包含值为null的属性。调试控制器时,JS调试器中为null的属性现在为“null”(字符串) 为什么会这样?我能做些什么来防止这种情况发生 C#对象 Javascript对象 var user = { Name: null } 控制器方法 public JsonResult HelloWorld(User user) { .. some logic ..

我通过$.ajax POST将对象从jQuery传递到MVC3控制器。在使用开发工具进行调试时,我可以看到分配给ajax数据属性的对象。对象包含值为null的属性。调试控制器时,JS调试器中为null的属性现在为“null”(字符串)

为什么会这样?我能做些什么来防止这种情况发生

C#对象

Javascript对象

var user = {
Name: null
}
控制器方法

public JsonResult HelloWorld(User user) { .. some logic .. }
ajax调用

var data = user;
$.ajax({
url: '/Controller/HelloWorld/',
data: data,
type: 'post',
success: ...
error: ...
})

是的,这是默认模型绑定器的一个不幸的副作用。您可以通过根本不在请求中包含null属性或使用JSON请求来避免它:

$.ajax({
    url: '@Url.Action("HelloWorld", "Controller")',
    data: JSON.stringify({ Name: null }),
    contentType: 'application/json',
    type: 'post',
    success: function (result) {
        // ...
    }
});
注意事项:

  • contentType:'application/json'
  • JSON.stringify
    围绕数据参数,以便将请求转换为JSON字符串

您能展示相关代码(js和cs)吗?我们没有做任何特别的事情。创建一个c#对象,创建一个匹配的javascript对象(将一些属性保留为null),然后使用jQuery ajax将该对象发布到控制器方法。对象的属性为“null”,因此控制器方法中的逻辑无关紧要。很酷,你能用JavaScript演示一下你是如何做到这一点的吗?我已经为你更新了这个问题。诚实的问题。您是否尝试过指定
contentType:'application/json;字符集=utf-8'
?(不是100%确定它在本例中是否有用tho)因此,在本例中,
contentType
毕竟有点帮助是的,因为现在是JSON值提供程序工厂,使用JavaScriptDeserializer类来处理解析,而不是默认的模型绑定器。是的,我建议过,但OP从未回复。至于
null
-“null”问题,我在另一个问题中推荐了这种方法,但
JSON.stringify
无疑是一种方法,因此您不必检查每个属性+1.
$.ajax({
    url: '@Url.Action("HelloWorld", "Controller")',
    data: JSON.stringify({ Name: null }),
    contentType: 'application/json',
    type: 'post',
    success: function (result) {
        // ...
    }
});