【问题标题】:alter output of xml serialization更改 xml 序列化的输出
【发布时间】:2011-07-06 15:18:07
【问题描述】:

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 反序列化为您的类的实例?你在用XmlSerializer吗?
  • 是的,我正在使用 xmlSerializer

标签: c# xml serialization controls


【解决方案1】:

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 方法以执行其他操作(即将时间存储在一个字段中,将偏移量存储在另一个字段中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-14
    • 2023-01-12
    • 2016-12-19
    • 2019-05-25
    • 1970-01-01
    • 2011-09-17
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多