在 MVC Web Api 4 Beta 中从 Json 中删除 Null 属性

Posted

技术标签:

【中文标题】在 MVC Web Api 4 Beta 中从 Json 中删除 Null 属性【英文标题】:Removing Null Properties from Json in MVC Web Api 4 Beta 【发布时间】:2012-04-26 09:03:19 【问题描述】:

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

【问题讨论】:

其实我是想省略。 【参考方案1】:

当前的 ASP.NET Web API(there are plans 将其更改为最终版本以使用 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 的格式化程序。

【讨论】:

【参考方案2】:

在 Json.Net 中,您可以将 JsonPropertyAttribute 与 NullValueHandling=NullValueHandling.Ignore 一起使用。看起来这里无法对整个班级执行此操作,只能对每个班级字段/属性进行明确说明。

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

仅供参考。 a reasons 为什么 Json.Net 默认使用空值序列化属性。看一下,可能有一些适用于您的案例的原因。

【讨论】:

以上是关于在 MVC Web Api 4 Beta 中从 Json 中删除 Null 属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在asp.net核心中从客户端调用web api方法?

在 POST 数据中从 Api 控制器重定向到 MVC 控制器

如何在 ASP.NET MVC 4 Beta 中禁用 Javascript/CSS 缩小

ASP.NET MVC 4 Web API

在 log4j2 中从 ThreadContext 设置和获取值

如何在 MVC 4/Web Api 2 中实现不记名令牌认证