【发布时间】:2014-06-22 15:37:03
【问题描述】:
我在使用 XML 序列化时遇到了一些问题。 (可能类似于THIS SO QUESTION,但关于序列化而不是反序列化)。
我需要使用自定义的 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));
我的 DaysDt 和 Days 列表总是包含 0 个对象,当我进行序列化时,它什么都不序列化...
此示例代码中有任何明显的错误吗?我很确定我在使用自定义格式的 List<DateTime> 和 List<string> 之间的转换中犯了一些错误......
【问题讨论】:
标签: c# xml list datetime serialization