小编典典

如何将 TimeSpan 序列化为 XML

all

我正在尝试将 .NETTimeSpan对象序列化为
XML,但它不起作用。一个快速的谷歌建议虽然TimeSpan是可序列化的,XmlCustomFormatter但不提供将TimeSpan对象转换为
XML 和从 XML 转换的方法。

一种建议的方法是忽略TimeSpanfor 序列化,而是序列化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 序列化?


阅读 99

收藏
2022-06-21

共1个答案

小编典典

您已经发布的方式可能是最干净的。如果你不喜欢额外的属性,你可以实现IXmlSerializable,但是你必须做 所有事情
,这在很大程度上违背了这一点。我很乐意使用您发布的方法;它是(例如)高效的(没有复杂的解析等),独立于文化的,明确的,并且时间戳类型的数字易于理解。

顺便说一句,我经常补充:

[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]

这只是将它隐藏在 UI 和引用 dll 中,以避免混淆。

2022-06-21