2016-02-14 98 views
0

我在那里我试图Deserialize System.TimeZoneInfo对象PCL项目,它给出了这样的例外:无法找到一个构造函数使用类型System.TimeZoneInfo

无法找到一个构造函数使用的类型系统.TimeZoneInfo。一个 类应该有一个默认的构造函数,一个带有 参数的构造函数或一个带有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

+0

的可能的复制[.NET PCL异常而从UTC转换的时间来指定的时区(http://stackoverflow.com/questions/24176274/net-pcl-exception-while-converting-time-from- utc-to-specified-timezone) –

回答

0

MSDN

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

+0

PCL中的问题,并非一切都可用,只有很少的方法可用... – user1932923

0

我不知道这是否回答您的问题...

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

0

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

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