我正在尝试使用 MVC4 WebAPI 将对象序列化为 JSON(RTM - 今天刚刚安装了 VS2012 RTM,但昨天在 RC 中遇到了这个问题),我希望在 JSON 输出中呈现所有空值。像这样:
[{"Id": 1, "PropertyThatMightBeNull": null},{"Id":2, "PropertyThatMightBeNull": null}]
但我得到的是
[{"Id":1},{"Id":2}]
我发现这个 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;
这并没有(似乎)错误,并且似乎实际上是基于查看我尝试的下一件事来执行的。
在控制器方法中(在 ApiController 的子类中),添加:
base.Configuration.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include; base.Configuration.Formatters.JsonFormatter.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include;
我说 #1 已执行,因为 #2 中的两个值在我逐步执行这些行之前已经设置。
在绝望的举动中(因为我真的不想装饰每个对象的每个属性)我尝试将此属性添加到一个为空且不存在的属性中:
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Include, NullValueHandling = NullValueHandling.Include)]
这三个都生成相同的 JSON,但省略了 null 属性。
补充笔记:
- 在 IIS(也尝试内置)、Windows 7、VS2012 RTM 中本地运行。
- 控制器方法返回列表——也尝试过 IEnumerable
- 我试图序列化的对象是 pocos。