DateTimeOffset
похоже на DateTime
, но также сохраняет исходную информацию о смещении часового пояса.К сожалению, XmlSerializer
не поддерживает DateTimeOffset
(DataContractSerializer
поддерживает, но не будет сериализовать его в ожидаемую строку).
Если у вас есть опция, я бы порекомендовал вам использоватьТип DateTimeOffset
и дополнительное свойство string
для сериализации.Вот пример:
[Serializable]
public class MyClass
{
const string TimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'sszzz";
[XmlElement("Time")]
public string TimeString { get{return Time.ToString(TimeFormat);} set{Time = DateTimeOffset.ParseExact(value, TimeFormat, null);} }
[XmlIgnore]
public DateTimeOffset Time { get; set; }
}
Ваш код будет взаимодействовать со свойством Time
, тогда как XmlSerializer
будет эффективно использовать свойство TimeString
вместо него.Затем вы можете точно контролировать, как обрабатывается преобразование в / из xml.
Если вы не хотите использовать тип DateTimeOffset
, вы можете изменить методы TimeString
, чтобы сделать что-то другое (например, сохранитьвремя в одном поле и смещение в другом поле).