簡體   English   中英

為包含集合的類實現IXmlSerializable

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM