too*_*ive 5 c# xml serialization controls
Web服务响应传回一个xml文件,一个元素是Date类型,其格式有时区信息,例如
12-30-2010T10:00:00+1:00
我的类有一个字段(DateTime)来接收值,但是,它只是将日期更改为本地时间.
12-30-2010T10:00:00+1:00
将被转换为
12-30-2010T02:00:00 (我当地时间是CST).
因此原始时区信息丢失了.我想要的只是忽略时区信息的时间
12-30-2010T10:00:00
或者以某种方式我可以在响应中提取时区信息,因此我可以在转换前将转换时间调整回原始时间.
任何人都知道如何在C#中做到这一点?
谢谢
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; }
}
Run Code Online (Sandbox Code Playgroud)
您的代码将与该Time属性交互,同时XmlSerializer有效地使用该TimeString属性。然后,您可以精确控制与 xml 之间的转换的处理方式。
如果您不想使用该DateTimeOffset类型,则可以修改TimeString方法来执行其他操作(即将时间存储在一个字段中,将偏移量存储在另一字段中)。
| 归档时间: |
|
| 查看次数: |
1196 次 |
| 最近记录: |