我是一名编程学生,我想知道在xml文件中将其序列化时是否可以更改日期的格式。此日期是ObservableCollection对象“Loan”的属性,此对象具有两个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。
答案 0 :(得分:1)
实现此目标的最简单方法可能是在您的类上实现IXmlSerializable接口。以下几行
public class Loan : IXmlSerializable
{
public void WriteXml(XmlWriter writer)
{
if(dateIn.HasValue)
{
writer.WriteElementString("dateIn", dateIn.Value.ToString());
}
}
}
在读取时,您需要读取元素名称,如果它是dateIn设置,否则设置适当的值。基本上检查它是否存在于XML中。
答案 1 :(得分:1)
如果你不想实现IXmlSerializable,那么对一个支持字段的字符串转换的一些DateTime应该可以做到这一点,如下所示:
public class Loan
{
[XmlIgnore]
private DateTime _dateOut;
public string OutDate
{
get { return _dateOut.ToString("dd-MM-yyyy"); }
set { _dateOut = DateTime.Parse(value); }
}
}
答案 2 :(得分:1)
查看XmlElement属性类(在System.Xml.Serialization中)。如果这不起作用,则this answer显示如何使用代理属性
[XmlElement("TheDate", DataType = "date")]
public DateTime TheDate { get; set; }
答案 3 :(得分:1)
我知道将我的答案标记为“一个”已经很晚了,但您可以控制序列化,而无需实现复杂的界面或将内容包装为变通方法。
public DateTime? InDate { get; set }
public bool ShouldSerializeInDate()
{
return InDate.HasValue;
}
C#XML Serializer的功能并不是很好。每个公共财产都可以有一种方法来打开或关闭财产的序列化。必须调用该方法: ShouldSerializeXYZ 其中 XYZ 是您要控制的属性的确切名称。