我正在尝试使用MVC4 WebAPI将对象序列化为JSON(RTM - 今天刚刚安装了VS2012 RTM但是昨天在RC中遇到了这个问题)并且我希望在JSON输出中呈现所有空值.像这样:
[{"Id": 1, "PropertyThatMightBeNull": null},{"Id":2, "PropertyThatMightBeNull": null}]
Run Code Online (Sandbox Code Playgroud)
但我得到的是
[{"Id":1},{"Id":2}]
Run Code Online (Sandbox Code Playgroud)
我发现这个Q/A WebApi没有序列化空字段,但答案要么对我不起作用,要么我没有掌握在哪里给出答案.
这是我尝试过的:
在Global.asax.cs的Application_Start中,我补充说:
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include;
json.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include;
Run Code Online (Sandbox Code Playgroud)
这似乎没有(似乎)错误,似乎实际执行基于我尝试的下一件事.
在控制器方法中(在ApiController的子类中),添加了:
base.Configuration.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include;
base.Configuration.Formatters.JsonFormatter.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include;
Run Code Online (Sandbox Code Playgroud)
我说#1被执行了因为#2中的两个值都已经在我走过之前已经设置好了.
在一个绝望的移动(因为我真的不想装饰每个对象的每个属性)我尝试将此属性添加到一个null和不存在的属性:
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Include,
NullValueHandling = NullValueHandling.Include)]
Run Code Online (Sandbox Code Playgroud)所有三个都生成相同的JSON,省略了null属性.
补充说明: