.NET 7独立进程Azure Function启用Newtonsoft.Json失败求助
解决.NET 7独立进程Azure Function中Newtonsoft.Json [JsonProperty]特性失效问题
问题根源
独立进程模式的Azure Functions默认使用System.Text.Json处理序列化,且ASP.NET Core MVC的配置(如AddMvcCore().AddNewtonsoftJson())不会影响Function Worker的序列化逻辑——这就是[JsonProperty]被忽略、[JsonPropertyName]却能正常生效的核心原因。
解决方案
1. 安装正确的NuGet包
卸载多余的Microsoft.AspNetCore.Mvc.NewtonsoftJson,安装专门针对独立进程Function的Newtonsoft扩展包:
Install-Package Microsoft.Azure.Functions.Worker.Extensions.Http.NewtonsoftJson -Version 7.0.1
(版本号需匹配.NET 7,可根据实际情况调整)
2. 配置Function Worker使用NewtonsoftJson
修改Program.cs中的HostBuilder配置,替换默认序列化器为NewtonsoftJson:
var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults(builder => { // 启用NewtonsoftJson处理Http请求/响应的序列化 builder.UseNewtonsoftJson(); }) .ConfigureServices((context, services) => { // 可选:自定义NewtonsoftJson序列化配置 services.Configure<NewtonsoftJsonSerializerOptions>(options => { // 保留默认契约解析器,确保[JsonProperty]特性生效 options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); // 可添加其他配置,如忽略空值、设置日期格式等 // options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore; }); }) .Build(); host.Run();
3. 验证返回逻辑
保持你的AuthResponse类和Login函数代码不变,重新运行Function,[JsonProperty("extended_status_code")]特性会正常生效,返回的JSON字段名将替换为指定值。
关键说明
独立进程Function的序列化逻辑由Microsoft.Azure.Functions.Worker控制,而非ASP.NET Core MVC管道,因此必须通过ConfigureFunctionsWorkerDefaults配置序列化器,而非Mvc相关的扩展方法。
内容的提问来源于stack exchange,提问作者pathrider
相关产品推荐
相关产品推荐

