![](/img/trans.png)
[英]Implementing IXmlSerializable for content containing data with or without CDATA tags
[英]Implementing IXmlSerializable for Classes Containing Collections
我需要能夠Xml Serialize一個內部的類,所以我必須實現IXmlSerializable。
這個類有兩個字符串和一個List。
我知道使用WriteElementString和ReadElementContentAsString讀取和寫入字符串。
但是,我迷失了如何在ReadXml和WriteXml方法中讀取和寫入List。
我該怎么做,或者有沒有辦法序列化和反序列化對象,同時保持它的內部可訪問性?
只需為列表本身編寫一個<List>
元素,然后遍歷這些項並將它們寫為<Item>
元素。
如果元素是可以是XML Serialized的類的實例,那么您可以為元素的類型創建XmlSerializer實例,然后將每個元素序列化為您已經使用的相同XmlWriter。 例:
public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("XmlSerializable");
writer.WriteElementString("Integer", Integer.ToString());
writer.WriteStartElement("OtherList");
writer.WriteAttributeString("count", OtherList.Count.ToString());
var otherSer = new XmlSerializer(typeof(OtherClass));
foreach (var other in OtherList)
{
otherSer.Serialize(writer, other);
}
writer.WriteEndElement();
writer.WriteEndElement();
}
public void ReadXml(XmlReader reader)
{
reader.ReadStartElement("XmlSerializable");
reader.ReadStartElement("Integer");
Integer = reader.ReadElementContentAsInt();
reader.ReadEndElement();
reader.ReadStartElement("OtherList");
reader.MoveToAttribute("count");
int count = int.Parse(reader.Value);
var otherSer = new XmlSerializer(typeof (OtherClass));
for (int i=0; i<count; i++)
{
var other = (OtherClass) otherSer.Deserialize(reader);
OtherList.Add(other);
}
reader.ReadEndElement();
reader.ReadEndElement();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.