2016-02-14 99 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(); 
    } 
相關問題