更改xml序列化的输出

本文关键字:输出 序列化 xml 更改 | 更新日期: 2023-09-27 18:01:15

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#中做到这一点吗?

感谢

更改xml序列化的输出

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方法来做其他事情(即将时间存储在一个字段中,将偏移量存储在另一个字段(。