SORU
12 Mart 2009, PERŞEMBE


Nasıl XML için bir zaman dilimi seri hale getirmek için

Bir seri hale getirmek için çalışıyorum .NET TimeSpan XML nesne ve çalışmıyor. Hızlı bir google TimeSpan seri hale getirilebilir ise, XmlCustomFormatter yöntem ve XML için TimeSpan nesneleri dönüştürmek için sağlamaz önerdi.

Önerilen bir yaklaşım serileştirme TimeSpan görmezden ve yerine TimeSpan.Ticks (ve seri kaldırma için new TimeSpan(ticks) kullanın) sonucu seri hale getirmek için. Bunun bir örneği aşağıdaki gibidir:

[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); }
    }
}

Bu benim kısa bir test - bu en iyi yolu bunu başarmak için? işe görünürken

Daha iyi bir yol ve XML seri hale getirmek için bir zaman aralığı var mı?

CEVAP
18 Temmuz 2011, PAZARTESİ


Bu tek yol üzerinde küçük bir değişiklik söz konusu önerdi, ama this Microsoft Connect issue bu seri hale getirme gibi bir özelliği kullanarak önerir:

[XmlIgnore]
public TimeSpan TimeSinceLastEvent
{
    get { return m_TimeSinceLastEvent; }
    set { m_TimeSinceLastEvent = value; }
}

// XmlSerializer does not support TimeSpan, so use this property for 
// serialization instead.
[Browsable(false)]
[XmlElement(DataType="duration", ElementName="TimeSinceLastEvent")]
public string TimeSinceLastEventString
{
    get 
    { 
        return XmlConvert.ToString(TimeSinceLastEvent); 
    }
    set 
    { 
        TimeSinceLastEvent = string.IsNullOrEmpty(value) ?
            TimeSpan.Zero : XmlConvert.ToTimeSpan(value); 
    }
}

Bu, 0:02:45 bir zaman aralığı olarak seri hale getirmek:

<TimeSinceLastEvent>PT2M45S</TimeSinceLastEvent>

Alternatif olarak, DataContractSerializer destekler zaman aralığı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • We've moved!

    We've moved!

    7 Ocak 2008
  • StalkerJS

    StalkerJS

    15 HAZİRAN 2010
  • TSE

    TSE

    12 Kasım 2012