Azure Functions 3.1 .NET Core 序列化返回对象时帕斯卡命名转驼峰配置问题
Azure Function HttpTrigger 序列化命名规则问题解答
可否全局配置序列化规则?
可以,无需为每个函数单独编写序列化逻辑,通过依赖注入注入全局序列化配置即可实现全局统一规则。
自动转驼峰的产生原因
你遇到的命名转换是ASP.NET Core默认序列化策略的表现:
- 进程内运行的Azure Function HttpTrigger底层复用了ASP.NET Core的MVC组件栈,默认使用
System.Text.Json作为序列化器 System.Text.Json的默认属性命名策略为JsonNamingPolicy.CamelCase,会自动将C#类常用的帕斯卡命名属性转换为JSON常用的驼峰命名格式
全局配置方法
进程内(In-Process)模型配置
添加Startup启动类,重写服务配置逻辑即可:
using Microsoft.Azure.Functions.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection; using System.Text.Json; [assembly: FunctionsStartup(typeof(MyService.BFF.Startup))] namespace MyService.BFF { public class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddControllers() .AddJsonOptions(options => { // 设为null即保留C#类的原属性命名(帕斯卡) options.JsonSerializerOptions.PropertyNamingPolicy = null; // 可按需添加其他序列化配置,例:忽略null值 // options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; }); } } }
隔离工作进程(Isolated Worker)模型配置
在Program.cs入口文件中配置即可:
using Microsoft.Extensions.Hosting; using System.Text.Json; var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults() .ConfigureServices(services => { services.Configure<JsonSerializerOptions>(options => { options.PropertyNamingPolicy = null; }); }) .Build(); host.Run();
设计逻辑说明
该默认设计是Web生态的通用适配策略:
- 前后端对接场景中,JavaScript/TypeScript的变量命名普遍遵循驼峰规范,默认转换可以大幅减少前后端字段命名适配的重复代码
- 该规则仅作用于默认序列化的对象响应场景,如果你手动序列化对象返回字符串类型响应,不会触发自动转换
- 全局配置的优先级高于默认规则,配置后所有函数的默认序列化行为都会统一生效,不会出现不同返回规则不一致的问题
内容的提问来源于stack exchange,提问作者Mat-Tap
相关产品推荐
相关产品推荐

