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
方法以執行其他操作(即將時間存儲在一個字段中,並將偏移量存儲在另一個字段中)。
你是如何將xml反序列化到你的類的實例?你在使用'XmlSerializer'嗎? –
是的,我正在使用xmlSerializer – toosensitive