【问题标题】:Unable to find a constructor to use for type System.TimeZoneInfo找不到用于 System.TimeZoneInfo 类型的构造函数
【发布时间】:2016-05-25 02:37:20
【问题描述】:

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

找不到用于 System.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 的任何其他方式。

【问题讨论】:

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


【解决方案1】:

根据MSDN

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

【讨论】:

  • PCL 中的问题,不是所有东西都可用,只有很少的方法可用...
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多