为什么Azure Functions不支持System.Text.Json,而每个人都在示例中使用NewtonSoft?

uwopmtnx  于 2023-08-07  发布在  其他
关注(0)|答案(2)|浏览(82)

为什么Azure函数不支持System.Text.Json,而每个人都在示例中使用newtonsoft?
是否可以在Azure函数中使用System.Text.Json?

public static class FanyFunctionName
{
    [FunctionName("FanyFunctionName")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]
        HttpRequest req,
        ILogger log)
    {
        try
        {
            // Read the request body and deserialize it
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            var eventObject = JsonConvert.DeserializeObject<Event>(requestBody);

            // Log the event type and other necessary information in one log statement
            return new OkResult();
        }
        catch (Exception ex)
        {
            log.LogError(ex, "Error processing event");
            return new BadRequestObjectResult("Error processing event");
        }
    }
}

字符串

pdtvr36n

pdtvr36n1#

是的,System.Text.Json可以在Azure函数和WebJobs中使用,没有任何问题。

kmbjn2e3

kmbjn2e32#

正如我已经在评论中提到的,这并不是说system.json.Text不支持,而是Azure函数默认使用Newtonsoft.Json
当我们创建Function App时,默认情况下,requestBodyNewtonsoft.Json生成JsonConvert.DeserializeObject代码。

  • Newtonsoft.Json编码:*
using Newtonsoft.Json;

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;

字符串
当我们使用System.Text.Json时,JsonConvert在函数中是不允许的,


的数据
我尝试了JsonSerializer.Deserialize<JsonElement>,得到了下面的错误。



我已经修改了代码如下,现在我能够访问的功能.

  • 使用System.Text.Json:*
using System.Text.Json;

string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
if (!string.IsNullOrEmpty(requestBody))
{
    dynamic data = JsonSerializer.Deserialize<JsonElement>(requestBody);
    name = name ?? data.GetProperty("name").GetString();
}

  • 输出:*

相关问题