我有一个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
的任何建议。
答案 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();
}