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

如何修改Azure Functions v4隔离进程的序列化配置?

问题描述

背景问题

我希望将POCO文档与最新v4版本的CosmosDbOutput绑定扩展配合使用。我偏好POCO属性采用PascalCase命名,但Cosmos/JSON文档采用camelCase命名,却找不到正确修改序列化配置的方法。

已尝试方案

  • 修改POCO为camelCase属性名:此方法可行,但不符合我的PascalCase偏好,还违反IDE1006代码规范。
  • 配置IOptions<WorkerOptions>与ConfigureCosmosDBExtensionOptions():在Program.cs中尝试这两种配置均未成功,且相关配置没有官方文档。

错误详情

执行函数时出现BadRequest(400)错误,提示输入无效。

解决方案

方法1:全局配置System.Text.Json序列化规则

在Program.cs中通过配置WorkerOptions的序列化选项,设置全局驼峰命名规则,所有绑定(包括CosmosDbOutput)都会遵循该规则:

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults(builder =>
    {
        builder.Services.Configure<JsonSerializerOptions>(options =>
        {
            options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
            options.PropertyNameCaseInsensitive = true;
        });
    })
    .Build();

host.Run();

方法2:单独配置CosmosDB绑定序列化

若无需全局修改,可针对CosmosDB绑定单独配置序列化规则:

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        services.Configure<CosmosDBExtensionOptions>(options =>
        {
            options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
        });
    })
    .Build();

host.Run();

方法3:手动指定单个属性名称

如果仅需对部分POCO属性设置驼峰命名,可使用System.Text.Json.Serialization命名空间下的JsonPropertyName特性:

using System.Text.Json.Serialization;

public class MyDocument
{
    [JsonPropertyName("id")]
    public string Id { get; set; }

    [JsonPropertyName("userName")]
    public string UserName { get; set; }
}

注意事项

v4版本的CosmosDB绑定使用System.Text.Json而非Newtonsoft.Json,需确保引用正确的命名空间。配置完成后重新运行函数,即可实现PascalCase属性到camelCase JSON的自动序列化,且不会违反IDE1006规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:28:11