无法找到用于System.TimeZoneInfo类型的构造函数

时间:2016-02-14 03:43:58

标签: c# .net timezone portable-class-library

我有一个PCL项目,我正在尝试Deserialize System.TimeZoneInfo对象并且它给出了这个例外:

  

无法找到用于System.TimeZoneInfo类型的构造函数。一个   class应该有一个默认的构造函数,一个构造函数   参数或用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的任何建议。

3 个答案:

答案 0 :(得分:0)

根据MSDN

  

您无法使用new关键字实例化TimeZoneInfo对象。相反,您必须调用TimeZoneInfo类的静态成员之一。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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