.NET 6独立托管Azure Function中配置JsonSerializerOptions的方法
.NET 6独立托管Azure Function中JSON序列化配置方案
一、全局配置JsonSerializerOptions
独立托管模式下的Azure Functions基于ASP.NET Core宿主,可通过配置JsonOptions服务实现全局序列化规则:
- 在
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();
- 在函数中使用全局配置:
通过依赖注入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
相关产品推荐
相关产品推荐

