如何修改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
相关产品推荐
相关产品推荐

