更改xml序列化的输出

时间:2011-07-06 15:18:08

标签: 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#中执行此操作?

谢谢

1 个答案:

答案 0 :(得分:2)

DateTimeOffsetDateTime类似,但也会保留原始时区偏移信息。遗憾的是,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方法以执行其他操作(即将时间存储在一个字段中,将偏移存储在另一个字段中)。 / p>