Azure Functions .NET 6(v4) 如何移除响应JSON中的null字段
.NET 6 Azure Functions v4 移除响应JSON null字段方案
通用ASP.NET Core Web API的JSON配置方法在Azure Functions v4中不生效,核心原因是Azure Functions v4有独立的序列化配置管道,不会读取MVC控制器的全局Json配置,按你使用的托管模式选择对应配置即可,配置后原有return new OkObjectResult(result);写法无需修改。
进程内(In-Process)托管模式(默认创建项目的模式)
全局配置(推荐)
直接在项目Program.cs的宿主构建阶段配置序列化规则,配置完成后所有接口返回自动生效:
- 默认使用System.Text.Json(.NET 6及以上版本默认序列化库)的配置代码:
using System.Text.Json.Serialization; var builder = WebApplication.CreateBuilder(args); // 配置Azure Functions序列化选项 builder.Services.Configure<JsonSerializerOptions>(options => { // 序列化时自动忽略值为null的字段 options.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; }); var app = builder.Build(); app.Run();
- 如果项目手动替换成Newtonsoft.Json作为序列化库,使用以下配置:
using Newtonsoft.Json; builder.Services.AddMvcCore().AddNewtonsoftJson(options => { options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; });
单模型配置(无需全局改动)
如果只需要特定返回模型过滤null字段,不需要修改全局配置,直接在模型类上标记特性即可:
- 使用System.Text.Json时的特性标记:
using System.Text.Json.Serialization; // 类级别特性,所有null字段自动忽略 [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public class ResponseItem { public string Name { get; set; } public int? Age { get; set; } public string Address { get; set; } }
- 使用Newtonsoft.Json时的特性标记:
using Newtonsoft.Json; // 类级别特性,所有null字段自动忽略 [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] public class ResponseItem { public string Name { get; set; } public int? Age { get; set; } public string Address { get; set; } }
独立工作进程(Isolated Worker)模式
该模式和进程内模式的配置管道完全独立,需要在Program.cs中按以下方式配置:
using System.Text.Json.Serialization; using Microsoft.Azure.Functions.Worker; var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults() .ConfigureServices(services => { services.Configure<JsonSerializerOptions>(options => { options.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; }); }) .Build(); host.Run();
注意:不要尝试修改
AddControllers()、AddMvc()下的JsonOptions,这部分配置只对原生MVC路由生效,不会作用于Azure Functions的触发器返回结果。
配置完成后,所有返回结果中值为null的字段都会被自动过滤,不会出现在最终响应的JSON中。
内容的提问来源于stack exchange,提问作者silent
相关产品推荐
相关产品推荐

