在 MVC Web API 4 Beta 中从 Json 中删除空属性

本文关键字:Json 删除 属性 中从 Beta MVC Web API | 更新日期: 2023-09-27 18:31:00

我正在序列化对象并从我的 Web 服务返回为 json。但是,我正在尝试从序列化的 json 中省略空属性。有没有办法做到这一点?我正在使用Web Api MVC 4测试版。

在 MVC Web API 4 Beta 中从 Json 中删除空属性

目前 ASP.NET Web API(计划将其更改为最终版本以使用 Json.Net)默认使用 DataContractJsonSerializer 来序列化 JSON。

因此,您可以使用标准 DataContract/DataMember 属性控制序列化过程。若要跳过空属性,可以将 EmitDefaultValue 设置为 false。

[DataContract]
public class MyObjet
{
    [DataMember(EmitDefaultValue = false)]
    public string Prop1 { get; set; }
    [DataMember(EmitDefaultValue = false)]
    public string Prop2 { get; set; }
}

如果你想更好地控制JSON响应的序列化方式,你可以使用WebAPIContrib包,其中包含使用 Json.Net 或内置JavaScriptSeralizer的格式化程序。

在 Json.Net 中,您可以将 JsonPropertyAttribute 与 NullValueHandling=NullValueHandling.Ignore 一起使用。看起来这里没有办法对整个类执行此操作,只能对每个类字段/属性进行显式操作。

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string SometimesNull { get; set; }

仅供参考。默认情况下 Json.Net 序列化具有 null 值的属性是有原因的。看一看,可能其中一些原因适用于您的情况。