繁体   English   中英

列表的XML序列化 <DateTime> 使用自定义的日期时间格式

[英]XML Serialization of a List<DateTime> using a custom datetime format

XML序列化有一些麻烦。 (可能类似于此问题 ,但涉及序列化而不是反序列化)。 我需要使用自定义DateTime格式序列化List<DateTime> 我可以为单个DateTime变量执行此操作,但是我不知道如何为列表执行操作。

这是我要在代码中尝试做的事情。

对于简单的DateTime变量,我使用以下代码:

[XmlType("Time")]
public class Time : BaseClass
{
    public Time()
    {
        base.Name = string.Empty;
        StartTimeDt = DateTime.Now;            
    }

    [XmlIgnore]
    public DateTime StartTimeDt
    {
        get { return DateTime.Parse(StartTime); }
        set { StartTime = value.ToString("yyyy-MM-dd HH:mm:ss.fff"); }
    }

    [XmlAttribute("StartTime")]
    public string StartTime { get; set; }
}

获取此XML结构:

<Time Name="" StartTime="2014-05-05 11:00:00.000">

当我创建一个新的Time类实例并对其进行序列化时,我获得了我期望的XML结构,其中StartTime变量已序列化为自定义日期时间格式。

当我有一个List<DateTime> ,我尝试使用这种代码:

[XmlType("Calendar")]
public class Calendar : BaseClass
{
    public Calendar()
    {
        base.Name = string.Empty;
        DaysDt = new List<DateTime>();
    }

    [XmlIgnore]
    public List<DateTime> DaysDt
    {
        get { return Days.Select(item => DateTime.Parse(item)).ToList(); }
        set { Days = value.Select(item => item.ToString("yyyy-MM-dd")).ToList(); }
    }

    [XmlArrayItem("Day", typeof(string))]
    public List<string> Days { get; set; }
}

生成此XML输出:

<Calendar Name="">
    <Days>
        <Day>2014-03-02</Day>
        <Day>2014-05-03</Day>
        <Day>[…]</Day>
    </Days>
</Annual>

但是我做的事情显然是错误的,因为当我创建一个Calendar类的新实例并尝试添加一些日期时间时,

Calendar calendar = new Calendar();
calendar.DaysDt = new List<DateTime>();
calendar.DaysDt.Add(DateTime.Now);
calendar.DaysDt.Add(DateTime.Now.AddDays(5));
calendar.DaysDt.Add(DateTime.Now.AddDays(10));

我的DaysDtDays列表始终都包含0对象,当我进行序列化时,它不序列化任何内容...

此示例代码中是否有任何明显的错误? 我很确定我在使用自定义格式的List<DateTime>List<string>之间的转换中犯了一些错误...

您发布的代码有误。

没有序列化是合理的。 DaysDt对象未序列化(因为您设置了XmlIgnore属性),并且您从未在Days对象上分配任何值。 我想您可能在将项目添加到列表中时会混淆/设置。

执行时:

calendar.DaysDt.Add(DateTime.Now);

塞特犬叫! 因此,您将获得一个空的Days对象。

请尝试以下代码为例,看看它是否有效:

Calendar calendar = new Calendar();
List<DateTime> lst = new List<DateTime>();
lst.Add(DateTime.Now);
lst.Add(DateTime.Now.AddDays(5));
lst.Add(DateTime.Now.AddDays(10));
calendar.DaysDt = lst;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM