如何通过代码/项目判断Azure函数使用的JSON序列化方式?
如何判断Azure Functions项目默认使用的JSON序列化方式
当未在对象上添加任何序列化特性时,Azure Functions的JSON序列化方式由**托管模式(进程内/隔离进程)**决定,可通过以下代码/项目特征直接判断:
1. 识别函数的托管模式特性
进程内(In-Process)模式:
函数类使用[FunctionName]特性(来自Microsoft.Azure.WebJobs命名空间),函数通常定义为静态方法,直接通过HttpRequest处理请求。
示例代码片段:[FunctionName("Function1")] public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log)此模式默认使用
Newtonsoft.Json进行序列化。隔离进程(Isolated)模式:
函数类使用[Function]特性(来自Microsoft.Azure.Functions.Worker命名空间),函数类为实例类(通过构造函数注入依赖,比如ILogger),基于Functions Worker SDK处理请求。
示例代码片段:[Function("Function1")] public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)此模式默认使用
System.Text.Json进行序列化。
2. 检查项目依赖的NuGet包
- 进程内项目:默认引用
Microsoft.NET.Sdk.Functions包,会间接依赖Newtonsoft.Json,可在.csproj文件或NuGet包管理器中查看。 - 隔离进程项目:默认引用
Microsoft.Azure.Functions.Worker.Sdk和Microsoft.Azure.Functions.Worker包,默认依赖System.Text.Json。
3. 观察代码中的默认序列化调用
- 进程内项目的模板代码中,会默认使用
Newtonsoft.Json.JsonConvert处理请求体反序列化,比如:dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject(requestBody); - 隔离进程项目的模板代码中,不会出现
Newtonsoft.Json的直接调用,若未手动配置,全程使用System.Text.Json。
4. 查看Program.cs配置(仅隔离进程项目存在)
隔离进程项目必然包含Program.cs,默认配置如下(使用System.Text.Json):
var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults() .Build(); host.Run();
如果项目手动切换到Newtonsoft.Json,会添加UseNewtonsoftJson()扩展方法:
.ConfigureFunctionsWorkerDefaults(builder => { builder.UseNewtonsoftJson(); })
内容的提问来源于stack exchange,提问作者Richardissimo
相关产品推荐
相关产品推荐

