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

.NET 6独立托管Azure Function中配置JsonSerializerOptions的方法

.NET 6独立托管Azure Function中JSON序列化配置方案

一、全局配置JsonSerializerOptions

独立托管模式下的Azure Functions基于ASP.NET Core宿主,可通过配置JsonOptions服务实现全局序列化规则:

  1. 在Program.cs的启动代码中添加全局配置:
var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        services.Configure<JsonOptions>(options =>
        {
            // 启用驼峰命名属性
            options.SerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
            // 序列化时忽略null值
            options.SerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
            // 可添加其他自定义规则,比如格式化缩进
            // options.SerializerOptions.WriteIndented = true;
        });
    })
    .Build();

host.Run();
  1. 在函数中使用全局配置:
    通过依赖注入IOptions<JsonOptions>获取配置好的序列化选项,直接传入WriteAsJsonAsync(注:需确保使用的是Microsoft.AspNetCore.Http.Json命名空间下的扩展方法):
public class ProjectFunction
{
    private readonly JsonSerializerOptions _globalJsonOptions;

    public ProjectFunction(IOptions<JsonOptions> jsonOptions)
    {
        _globalJsonOptions = jsonOptions.Value.SerializerOptions;
    }

    [Function("GetProject")]
    public async Task<HttpResponseData> Run([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequestData req)
    {
        // 示例:获取Project对象
        var project = await req.HttpContext.RequestServices.GetRequiredService<IProjectRepository>().GetAsync();
        
        var response = req.CreateResponse(HttpStatusCode.OK);
        await response.WriteAsJsonAsync(project, _globalJsonOptions);
        return response;
    }
}

二、扩展WriteAsJsonAsync支持自定义选项

如果需要在单个请求中灵活指定序列化规则,可以给HttpResponseData封装扩展方法:

public static class HttpResponseDataExtensions
{
    public static Task WriteAsJsonAsync<T>(this HttpResponseData response, T value, JsonSerializerOptions options, CancellationToken cancellationToken = default)
    {
        response.Headers.Add("Content-Type", "application/json; charset=utf-8");
        return JsonSerializer.SerializeAsync(response.Body, value, options, cancellationToken);
    }
}

使用时直接传入自定义选项即可:

var customOptions = new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
};

await response.WriteAsJsonAsync(project, customOptions);

三、简化写法:返回JsonResult

若希望贴近ASP.NET Core MVC的使用体验,可直接返回JsonResult,它会自动应用全局配置的序列化规则:

[Function("GetProject")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
{
    var project = GetProject();
    return new JsonResult(project);
}

内容的提问来源于stack exchange,提问作者marc_s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:40:33