今天在做个wp7的demo,发现xml序列化的时候TimeSpan这个字段总是为TimeSpan.Zero,很是郁闷,怎么整都不行,换成double格式的就可以。我就尝试在网上查找相关资料,看到Gildor Wang 有篇文章,才真正的确信,真的有这个问题:TimeSpan用XmlSerializer 序列化的时候不管用。现在把原文发上来:
今天在用XmlSerializer序列化一个类时发现一个TimeSpan类型的属性内容始终为空,后来实验发现Timespan类型对象的序列化结果总是空的,虽然还不清楚原因,但是在StackOverflow上看到了不错的一个解决方法:
[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); }
}
}
其实也就是用一个long的对应值(Ticks)来代替TimeSpan序列化。