簡體   English   中英

如何反序列化DateTime對象列表?

[英]How can I deserialize a list of DateTime objects?

如果我有以下XML段:

<Times>
  <Time>1/1/1900 12:00 AM</Time>
  <Time>1/1/1900 6:00 AM</Time>
</Times>

相應的屬性應該是什么樣的,當反序列化發生時,將上述XML接受到DateTime對象列表中?

這可以將XML段反序列化為string對象列表:

[XmlArray("Times")]
[XmlArrayItem("Time", typeof(string))]
public List<string> Times { get; set; }

但是當我使用DateTime作為類型而不是字符串(對於List類型和XmlArrayItem類型)時,我收到以下錯誤:

The string '1/1/1900 12:00 AM' is not a valid AllXsd value.

謝謝!

使用DateTime ,我預計問題的很大一部分是xml的格式錯誤; 這不是日期的xsd標准......你能影響xml嗎? 否則,您可能必須堅持使用字符串並在之后處理它。

更標准的xml將是:

<Times>
  <Time>1900-01-01T00:00:00</Time>
  <Time>1900-01-01T06:00:00</Time>
</Times>

例如:

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
public class Data
{

    [XmlArray("Times")]
    [XmlArrayItem("Time")]
    public List<DateTime> Times { get; set; }

    static void Main()
    {
        XmlReader xr = XmlReader.Create(new StringReader(@"<Data><Times>
  <Time>1900-01-01T00:00:00</Time>
  <Time>1900-01-01T06:00:00</Time>
</Times></Data>"));
        XmlSerializer ser = new XmlSerializer(typeof(Data));
        Data data = (Data) ser.Deserialize(xr);
        // use data
    }
}

最簡單的方法是創建一個序列化而不是Times屬性的新屬性,並處理格式:

    [XmlIgnore]
    public IList<DateTime> Times { get; set; }

    [XmlArray("Times")]
    [XmlArrayItem("Time")]
    public string[] TimesFormatted
    {
        get
        {
            if (this.Times != null)
                return this.Times.Select((dt) => dt.ToString("MM/dd/yyyy hh:mm tt", CultureInfo.InvariantCulture)).ToArray();
            else
                return null;
        }
        set
        {
            if (value == null)
                this.Times = new List<DateTime>();
            else
                this.Times = value.Select((s) => DateTime.ParseExact(s, "MM/dd/yyyy hh:mm tt", CultureInfo.InvariantCulture)).ToList();
        }
    }

看一下msdn文章: http//msdn.microsoft.com/en-us/library/ms950721.aspx

它建議DateTime對象應該標記為:[System.Xml.Serialization.XmlElementAttribute(“publication-date”,DataType =“date”)]
public System.DateTime publicationdate;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM