【发布时间】:2010-10-12 21:11:06
【问题描述】:
我正在尝试将 .NET TimeSpan 对象序列化为 XML,但它不工作。一个快速的谷歌建议虽然TimeSpan 是可序列化的,但XmlCustomFormatter 不提供将TimeSpan 对象与XML 相互转换的方法。
一种建议的方法是忽略TimeSpan 进行序列化,而是序列化TimeSpan.Ticks 的结果(并使用new TimeSpan(ticks) 进行反序列化)。一个例子如下:
[Serializable]
public class MyClass
{
// Local Variable
private TimeSpan m_TimeSinceLastEvent;
// Public Property - XmlIgnore as it doesn't serialize anyway
[XmlIgnore]
public TimeSpan TimeSinceLastEvent
{
get { return m_TimeSinceLastEvent; }
set { m_TimeSinceLastEvent = value; }
}
// Pretend property for serialization
[XmlElement("TimeSinceLastEvent")]
public long TimeSinceLastEventTicks
{
get { return m_TimeSinceLastEvent.Ticks; }
set { m_TimeSinceLastEvent = new TimeSpan(value); }
}
}
虽然这在我的简短测试中似乎有效 - 这是实现这一目标的最佳方式吗?
有没有更好的方法将 TimeSpan 序列化到 XML 和从 XML 序列化?
【问题讨论】:
-
Rory MacLeod 下面的回答实际上是微软建议这样做的方式。
-
我不会对 TimeSpand 使用长刻度,因为 XML 的持续时间类型是完全匹配的。该问题于 2008 年向 Microsoft 提出,但从未得到解决。当时记录了一个解决方法:kennethxu.blogspot.com/2008/09/…
标签: c# serialization timespan