You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Framework 4.7.2中HttpApplication如何忽略JSON响应空属性

.NET Framework 4.7.2 HttpApplication 中移除JSON响应的Null字段

普通Web API(非OData)场景

直接在Global.asax.cs的Application_Start方法里配置JSON序列化规则:

var jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
jsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;

这段代码会让Web API返回JSON时自动跳过值为null的字段。

OData响应场景

OData有独立的序列化机制,需要自定义序列化器来实现:

  1. 创建自定义的OData序列化器和提供器
public class CustomODataSerializerProvider : DefaultODataSerializerProvider
{
    public CustomODataSerializerProvider(IServiceProvider serviceProvider) : base(serviceProvider)
    {
    }

    public override ODataEdmTypeSerializer GetEdmTypeSerializer(IEdmTypeReference edmType)
    {
        var serializer = base.GetEdmTypeSerializer(edmType) as ODataResourceSerializer;
        if (serializer != null)
        {
            return new CustomODataResourceSerializer(this);
        }
        return base.GetEdmTypeSerializer(edmType);
    }
}

public class CustomODataResourceSerializer : ODataResourceSerializer
{
    public CustomODataResourceSerializer(ODataSerializerProvider serializerProvider) : base(serializerProvider)
    {
    }

    protected override void WriteStructuralProperty(ODataWriter writer, EntityPropertyMappingMapping epmMap, StructuralPropertySegment structuralProperty, IEdmStructuralProperty edmProperty, object propertyValue, ODataResourceContext resourceContext)
    {
        // 字段值为null时跳过写入
        if (propertyValue == null)
        {
            return;
        }
        base.WriteStructuralProperty(writer, epmMap, structuralProperty, edmProperty, propertyValue, resourceContext);
    }
}
  1. 在Global.asax.cs的Application_Start里注册自定义提供器
GlobalConfiguration.Configuration.MapODataServiceRoute("ODataRoute", null, builder =>
{
    // 这里替换成你的OData实体配置,比如builder.EntitySet<Product>("Products");
    builder.SetSerializerProvider(new CustomODataSerializerProvider(GlobalConfiguration.Configuration.ServiceProvider));
});

这样OData响应里的null字段就不会被输出了。

内容的提问来源于stack exchange,提问作者Subhayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 06:42:22