ASP.NET Core OData:EDM实体端点如何排除序列化空值属性?
问题原因及解决方案
差异原因
两个端点的序列化机制存在本质区别:
- 未注册EDM实体的端点:ASP.NET Core会直接使用全局配置的NewtonsoftJson序列化器处理响应,因此
NullValueHandling.Ignore的配置会直接生效,自动排除空值属性。 - 注册了EDM实体的端点:OData会启用自身的ODataSerializer进行序列化,这个序列化器默认不继承全局NewtonsoftJson的空值处理规则,而是依据EDM模型的元数据逻辑保留空值属性,所以会出现
myProperty: null的情况。
解决办法
可以通过配置OData的序列化选项,让注册EDM实体的端点也忽略空值属性,具体实现如下:
在Program.cs的OData服务注册代码中,添加SetSerializerOptions配置,指定空值处理规则:
builder.Services.AddControllers() .AddOData(options => options.AddRouteComponents("odata", GetEdmModel()) .EnableQueryFeatures() // 配置OData序列化器忽略空值属性 .SetSerializerOptions(serializerOpts => serializerOpts.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore));
配置完成后,所有通过该EDM模型路由的OData端点都会遵循空值忽略规则,响应中不再包含null值属性。
内容的提问来源于stack exchange,提问作者Jimmy Hannon
相关产品推荐
相关产品推荐

