我有一个 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();
}