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

.NET 8独立工作者模式下System.Text.Json PascalCase序列化失效求助

.NET 8 Azure Functions孤立工作者模式下API响应无法改为PascalCase的解决方法

问题描述

将.NET 6进程内模式Azure Functions升级到.NET 8孤立工作者模式后,API响应默认变为camelCase。尝试以下方案均无效:

  • 完全切换到System.Text.Json
  • 自定义PascalCase JsonNamingPolicy
  • 添加DefaultJsonTypeInfoResolver到配置选项
  • 使用[JsonPropertyName](因项目属性数量过多不可行)

奇怪的是,直接调用JsonSerializer.Serialize(myData)能生成正确的PascalCase字符串,但通过OkObjectResult返回时始终是camelCase。

问题原因

在.NET 8孤立工作者模式的Azure Functions中,全局配置的JsonSerializerOptions不会自动应用到HTTP响应的序列化逻辑上。Functions工作者使用WorkerOptions内部的JsonSerializerOptions来处理HTTP输出的序列化,而非DI容器中配置的全局选项。

解决方案

需要通过配置WorkerOptions来指定HTTP响应的序列化规则,替换原有的全局JsonSerializerOptions配置方式:

修改Program.cs配置代码

public static void Main()
{
    var host = new HostBuilder()
            .ConfigureFunctionsWebApplication((builder) =>
            {
                // 配置WorkerOptions中的Json序列化选项
                builder.Services.Configure<WorkerOptions>(options =>
                {
                    options.JsonSerializerOptions.PropertyNamingPolicy = new PascalCaseJsonNamingPolicy();
                    options.JsonSerializerOptions.TypeInfoResolver = new DefaultJsonTypeInfoResolver();
                    options.JsonSerializerOptions.WriteIndented = true;
                });
            })
            .ConfigureServices(services => FunctionStart.Configure(services))
            .Build();

    host.Run();
}

额外注意事项

  • 检查项目中是否存在函数内部单独配置序列化选项的代码,避免覆盖全局配置
  • 确认自定义PascalCaseJsonNamingPolicy的逻辑正确性(当前代码实现首字母大写,符合PascalCase规范)
  • 若存在其他第三方序列化扩展,需排查是否与WorkerOptions的配置冲突

测试验证

修改配置后,返回OkObjectResult时,Document类的UniqueId、UserId会以PascalCase格式输出,Id则会遵循[JsonPropertyName("id")]的配置输出为小写id。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:09:58