.NET Core 5.0如何忽略响应Null值以缩减接口响应体积?
.NET Core 5.0 忽略JSON响应Null值缩减体积方案
问题分析
你直接返回模型时响应体积为16.6MB,手动用Newtonsoft.Json序列化后体积增至24MB,核心原因是手动序列化时启用了Formatting.Indented(缩进格式化),额外的空格、换行大幅增加了字符量;同时直接返回模型时框架会自动处理序列化优化(甚至可能启用压缩),手动序列化字符串返回则丢失了这些优化。
有效解决方案
方案1:配置默认System.Text.Json忽略Null值(.NET Core 5默认序列化器)
.NET Core 5默认使用System.Text.Json作为JSON序列化器,全局配置忽略Null值只需在Startup.cs的ConfigureServices中添加如下配置:
services.AddControllers() .AddJsonOptions(options => { // 序列化时忽略值为Null的属性 options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; });
配置后直接返回模型Ok(response)即可,框架会自动按配置序列化,无需手动处理。
方案2:若项目使用Newtonsoft.Json(需提前安装包)
如果你的项目配置了使用Newtonsoft.Json(通过Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet包),全局配置忽略Null值如下:
services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; // 注意:不要手动加Formatting.Indented,避免额外体积开销 });
额外优化:启用响应压缩
配合响应压缩可进一步大幅减小体积,在Startup.cs中添加:
// 注册响应压缩服务 services.AddResponseCompression(options => { options.EnableForHttps = true; options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[] { "application/json" }); }); // 在Configure中启用中间件 app.UseResponseCompression();
验证效果
配置完成后,接口返回的JSON会自动剔除所有值为Null的属性,如你期望的示例所示,同时保持序列化的紧凑格式(无多余缩进),配合压缩后体积会显著降低。
内容的提问来源于stack exchange,提问作者wozzarvl
相关产品推荐
相关产品推荐

