首页 > 解决方案 > JsonSerializer 无法在 Azure 函数中反序列化 DateTimes

问题描述

我有一个 Azure 函数,它从队列 fx 接收一些 JSON。

{"FromDate":"2020-05-26T07:15:00.3714532+00:00","ToDate":"2020-06-25T07:15:00.3714532+00:00"}

使用System.Text.Json.JsonSerializer我正在尝试将此 JSON 反序列化为以下类型的对象:

public class DateRange
{
    public DateTime? FromDate { get; set; }
    public DateTime? ToDate { get; set; }
}

反序列化:

var dateRange = JsonSerializer.Deserialize<DateRange>(json);

这在 Azure 中不起作用 -FromDate并且ToDate始终被解析为默认日期1/1/0001 12:00:00 AM。奇怪的是 JSON 是从另一个带有JsonSerializer.Serialize(dateRange). 但是,如果我在本地运行 Azure 函数,它确实可以工作。

文档看来,日期/时间格式

"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'FFFFFFF('+'/'-')HH':'mm"

支持在 JSON发送(这是有道理的,因为它是由 创建的JsonSerializer.Serialize())。

为什么它无法反序列化我的 JSON?为什么它可以在本地工作,但不能在 Azure 上工作?

标签: jsonazure-functionssystem.text.json

解决方案


您是否使用绑定的队列作为函数的输入(并触发它)?您能否展示如何将序列化的字符串写入队列,然后在反序列化之前如何从队列中读取它?您确定从消息中获取的字符串与您的示例中的字符串完全一样吗?我之所以问,是因为绑定到函数的队列中的消息预计将采用 base64 编码,如果您忘记这一点,则会导致很多问题。而且由于它在本地工作,我会责怪传输机制(队列)改变行为。


推荐阅读