[英]Serialize DateTime property to XML in C#
我是一名编程专业的学生,我想知道在将日期序列化为xml文件时是否可以更改日期格式。 此日期是对象“贷款”的ObservableCollection的属性,此对象具有两个DateTime属性,日期之一是可为空的对象。 我序列化了所有集合,包括日期。
我想在xml文件中获取:
<OutDate> 15-03-2014 </OutDate>
<!--If the date is null I don´t want to appear the node-->
我得到这个:
<OutDate>2014-03-15T00:00:00</OutDate>
<InDate xsi:nil="true" />
这是我的代码项目的一部分:类贷款的一部分,已经标记为可序列化,如下所示:
private string isbn;
private string dni;
private DateTime dateOut;
private DateTime? dateIn;
// Setters and Gettters and constructors
这是序列化的方法:
// I will pass three collections to this method loans, books and clients
public void SerializeToXML<T>(string file, string node, ObservableCollection<T> collection)
{
XmlRootAttribute root = new XmlRootAttribute(node);
XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<T>), root);
using (FileStream fs = new FileStream(file, FileMode.Create))
{
serializer.Serialize(fs, collection);
}
}
电话:
SerializeToXML<Loan>(_file, "Library", manager.LoansCollection);
Thnks。
如果您不想实现IXmlSerializable ,则可以使用一些DateTime到后备字段的字符串转换来解决问题,如下所示:
public class Loan
{
[XmlIgnore]
private DateTime _dateOut;
public string OutDate
{
get { return _dateOut.ToString("dd-MM-yyyy"); }
set { _dateOut = DateTime.Parse(value); }
}
}
可能最简单的方法是在类上实现IXmlSerializable接口。 遵循以下内容
public class Loan : IXmlSerializable
{
public void WriteXml(XmlWriter writer)
{
if(dateIn.HasValue)
{
writer.WriteElementString("dateIn", dateIn.Value.ToString());
}
}
}
读取时,您需要读取Element名称(如果设置了dateIn),否则请设置适当的值。 基本上检查它是否存在于XML中。
看一下XmlElement属性类(在System.Xml.Serialization中)。 如果这不起作用,那么此答案将显示如何使用代理属性
[XmlElement("TheDate", DataType = "date")]
public DateTime TheDate { get; set; }
我知道将答案标记为“一个”已经为时已晚,但是您可以控制序列化,而无需实现复杂的接口或将内容打包作为解决方法。
public DateTime? InDate { get; set }
public bool ShouldSerializeInDate()
{
return InDate.HasValue;
}
C#XML序列化器的文档功能不够完善。 每个公共财产都可以使用一种方法来打开或关闭该财产的序列化。 该方法必须被调用: ShouldSerializeXYZ ,其中XYZ是您要控制的属性的确切名称。
请参阅: Xml序列化-隐藏空值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.