[英]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.