使用System.Text.Json序列化DateTimeOffset时如何影响时区?

问题描述 投票:0回答:1

要解决的任务:

给出DateTimeOffset,其值具有特定的偏移量。我想使用它所表示的确切形式来序列化它,并使用确切的日期和时间值以及精确相同的偏移值

问题

[当前,当序列化矩时是正确的,但是时间点的格式化序列化版本将转换为根据当前时区的偏移量。 (这样虽然时间点仍然正确,但是原始偏移信息丢失了)

示例

给出日期为:2019-07-26且时间为:00:00:00且偏移为:-05:00的DateTimeOffset在系统中,当当前时区给出结果时,此特定日期和时间的偏移量为+01:00,DateTimeOffset将被序列化为:

2019-07-26T00:06:00 + 01:00

我想将其序列化为

2019-07-26T00:00:00-05:00

我知道这两个时间相等。我也确实知道时区和偏移量之间的区别,并且在措辞当当前时区给出结果时,这个特定的日期和时间具有偏移量+01:00

时要小心。

在我们的持久性和业务记录中,不仅确切的时间点很重要,而且偏移量本身也具有意义。

我尝试过的事情:

我看到自动等式转换为当前时区的偏移量是在Utf8JsonWriter中完成的,它不是为自定义或继承而设计的。我已经尝试实现自定义转换器,但是必须在其中注入自定义功能的级别要高得多。

public class DateTimeConverterUsingDateTimeParse : JsonConverter<DateTimeOffset>
{
    public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
    {
        // Based on the experience I've described in the OP, it is useless
        // to anything with the `DateTimeOffset value` because regardless its Offset, Utf8JsonWriter will write it with the current timezone's offset for the date.
    }
}
c# serialization .net-core timezone datetimeoffset
1个回答
0
投票

[System.Text.Json支持本地时区或UTC的序列化。

您似乎确实知道这一点。

解决问题的其他方法是在时区之间转换。看到此链接:https://docs.microsoft.com/en-us/dotnet/standard/datetime/converting-between-time-zones#converting-between-any-two-time-zones

© www.soinside.com 2019 - 2024. All rights reserved.