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

.NET 8 Azure Functions中设置System.Text.JsonSerializer默认配置的正确方式

.NET 8 Azure Functions中设置System.Text.JsonSerializer默认配置的正确方式

我完全懂你的痛点——用.NET 8的Azure Functions新模板(依赖ConfigureFunctionsWebApplication而非旧的ConfigureFunctionWorker),想给所有返回JsonResult、OkObjectResult的请求统一设置System.Text.Json的序列化规则,结果直接配置JsonOptions完全没效果,用AddMvcCore()虽然能成,但又怕拖进来一堆用不上的依赖。

问题出在你配置的JsonOptions类型不对!你之前用的应该是Microsoft.AspNetCore.Http.Json.JsonOptions(针对HttpContext.Response.WriteAsJsonAsync这类底层API的配置),而JsonResult这类Mvc风格的结果,依赖的是**Microsoft.AspNetCore.Mvc.JsonOptions**——这是两个完全独立的配置类,所以之前的代码才会“完全没用”。

下面是正确的配置方式,既不会引入多余依赖,又能让所有JsonResult生效:

using Microsoft.AspNetCore.Mvc; // 确保引入这个命名空间

// ... 其他宿主构建代码
.ConfigureFunctionsWebApplication((hostBuilderContext, functionsWorkerApplicationBuilder) =>
{
    functionsWorkerApplicationBuilder.Services.Configure<JsonOptions>(options =>
    {
        options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
        options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
        options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
#if DEBUG
        options.JsonSerializerOptions.WriteIndented = true;
#endif
    });
})

如果你的代码里同时用到了WriteAsJsonAsync这类底层Http API,需要给它们也配置相同规则的话,可以额外加一段配置:

// 可选:给底层Http响应的Json序列化配置相同规则
functionsWorkerApplicationBuilder.Services.Configure<Microsoft.AspNetCore.Http.Json.JsonOptions>(options =>
{
    options.SerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
    options.SerializerOptions.Converters.Add(new JsonStringEnumConverter());
    // 其他和上面一致的配置项
});

这种方式只针对所需的Json序列化配置进行设置,不会像AddMvcCore()那样引入完整的Mvc控制器栈,完全符合你想要的“轻量”需求。

备注:内容来源于stack exchange,提问作者zu1b

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 06:53:06