[英]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));
我的DaysDt
和Days
列表始终都包含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.