无法使MVC4 WebApi包含JSON中的空字段

And*_*ese 6 json.net asp.net-web-api

我正在尝试使用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没有序列化空字段,但答案要么对我不起作用,要么我没有掌握在哪里给出答案.

这是我尝试过的:

  1. 在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)

    这似乎没有(似乎)错误,似乎实际执行基于我尝试的下一件事.

  2. 在控制器方法中(在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中的两个值都已经在我走过之前已经设置好了.

  3. 在一个绝望的移动(因为我真的不想装饰每个对象的每个属性)我尝试将此属性添加到一个null和不存在的属性:

    [JsonProperty(DefaultValueHandling = DefaultValueHandling.Include,
        NullValueHandling = NullValueHandling.Include)]
    
    Run Code Online (Sandbox Code Playgroud)

所有三个都生成相同的JSON,省略了null属性.

补充说明:

  • 在IIS中本地运行(也尝试内置),Windows 7,VS2012 RTM.
  • 控制器方法返回List - 尝试了IEnumerable
  • 我正在尝试序列化的对象是pocos.

Fil*_*p W 10

这不起作用:

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include;
Run Code Online (Sandbox Code Playgroud)

但这样做:

    GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = new Newtonsoft.Json.JsonSerializerSettings() 
{ 
NullValueHandling = Newtonsoft.Json.NullValueHandling.Include
};
Run Code Online (Sandbox Code Playgroud)


And*_*ese 1

我终于遇到了这个http://forums.asp.net/t/1824580.aspx/1?Serializing+to+JSON+Nullable+Date+gets+ommissed+using+Json+NET+and+Web+API+尽管如此+specifying+NullValueHandling描述了我在针对 RTM 修复的 Beta 版中遇到的错误。

虽然我已经安装了 VS2012 RTM,但我的项目仍在使用测试版附带的所有 nuget 包。所以我对所有内容进行了更新(nugot?),现在一切都很好(使用我问题中的#1)。虽然我已经烧了半天了,但我还是觉得很傻。