web服务响应传回一个xml文件,一个元素是日期类型,其格式有时区信息,例如
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; }
}
您的代码将与 Time
属性交互,而 XmlSerializer
将有效地使用 TimeString
属性代替它。然后,您可以精确控制与 xml 之间的转换的处理方式。
如果您不想使用 DateTimeOffset
类型,您可以修改 TimeString
方法来做其他事情(即在一个字段中存储时间和偏移量在另一个领域)。
关于c# - 改变 xml 序列化的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6598814/