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



我有一个 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的方法的任何建议。

根据 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();
    }

相关内容

  • 没有找到相关文章

最新更新