找不到用于 System.TimeZoneInformation 类型的构造函数

本文关键字:构造函数 类型 TimeZoneInformation 用于 System 找不到 | 更新日期: 2023-09-27 18:34:27

我有一个 PCL 项目,我正在尝试Deserialize System.TimeZoneInfo对象,它给出了以下异常:

找不到用于 System.TimeZoneInformation 类型的构造函数。一个 类应该有一个默认构造函数,一个构造函数 参数或用 JsonConstructor 属性标记的构造函数。 路径"Id",第 1 行,位置 6。

"{'"Id'":'"Pacific Standard Time'",'"DisplayName'":'"(UTC-08:00) Pacific Time (US & Canada)'",'"StandardName'":'"Pacific Standard Time'",'"DaylightName'":'"Pacific Daylight Time'",'"BaseUtcOffset'":'"-08:00:00'",'"SupportsDaylightSavingTime'":true}"

创建自己的转换器可能无法进行,因为您可以对 PCL 库中TimeZoneInfo对象执行的操作非常有限。如何解决此问题或任何其他访问TimeZoneInfo的方法的任何建议。

找不到用于 System.TimeZoneInformation 类型的构造函数

根据 MSDN,

不能使用 new 关键字实例化时区信息对象。相反,您必须调用 TimeZoneInfo 类的静态成员之一。

我不确定这是否回答了你的问题......

此类是可序列化的,但它实现 IDeserializationCallback 接口。因此,为了反序列化,您需要订阅它的 IDeserializationCallback.OnDeserialization 方法。

我遇到的一个解决方案是使用 Noda Time,我们可以这样在 datetimeoffset 中进行转换。

private static DateTimeOffset GetDateTimeOffset(string timeZone, DateTimeOffset userTime)
    {            
        var provider = DateTimeZoneProviders.Tzdb[timeZone];
        return Instant.FromDateTimeOffset(userTime).InZone(provider).ToDateTimeOffset();
    }