2011-07-06 70 views
5

Web服務響應傳回一個xml文件,其中一個元素是Date類型,其格式包含時區信息,例如,更改xml序列化的輸出

12-30-2010T10:00:00+1:00

我班有一個字段(日期時間),以獲得的價值,但是,它只是改變日期爲本地時間。

12-30-2010T10:00:00+1:00

將被轉換爲

12-30-2010T02:00:00(我的本地時間爲CST)。

原來的時區信息丟失了。 什麼,我要的只是時間無視時區信息,只需

12-30-2010T10:00:00

或一些方法我可以提取在響應時區信息,所以我可以調整轉換的時間回到原來的時間轉換之前。

任何人都知道如何在C#中做到這一點?

感謝

+0

你是如何將xml反序列化到你的類的實例?你在使用'XmlSerializer'嗎? –

+0

是的,我正在使用xmlSerializer – toosensitive

回答

2

DateTimeOffset就像DateTime而且還保留了原有的時區偏移信息。不幸的是,XmlSerializer不支持DateTimeOffsetDataContractSerializer這樣做,但它不會將其序列化爲您期望的字符串)。

如果您也有選擇,我建議您使用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方法以執行其他操作(即將時間存儲在一個字段中,並將偏移量存儲在另一個字段中)。

+0

非常感謝,邁克爾!有用 – toosensitive