.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有独立的序列化机制,需要自定义序列化器来实现:
- 创建自定义的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); } }
- 在
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
相关产品推荐
相关产品推荐

