Я сделал это совсем недавно и не нашел переопределения интерфейса IXmlSerializable вообще сложным или сложным. Сериализация / десериализация как обычно, но для класса, который содержит подкласс, который необходимо обернуть в дополнительные теги, производные от IXmlSerializable:
class ContainingClass : IXmlSerializable
{
...
#region IXmlSerializable Members
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
**reader.ReadStartElement("Equipment");**
XmlSerializer ser = new XmlSerializer(typeof(Host));
while (reader.NodeType != XmlNodeType.EndElement)
{
Host newHost = new Host();
newHost.Name = (string) ser.Deserialize(reader);
_hosts.Add(newHost);
reader.Read();
}
// Read the node to its end.
// Next call of the reader methods will crash if not called.
**reader.ReadEndElement(); // "Equipment"**
}
public void WriteXml(XmlWriter writer)
{
XmlSerializer ser = new XmlSerializer(typeof(Host));
**writer.WriteStartElement("Equipment");**
foreach (Host host in this._hosts)
{
ser.Serialize(writer, host);
}
**writer.WriteEndElement();**
}
#endregion
Все, что я здесь делаю, - это завершение де / сериализации объектов более низкого уровня. Здесь я оборачиваю дополнительный тег «Снаряжение» вокруг всех Хозяев в коллекции этого класса. Здесь вы можете добавить столько тегов, сколько захотите, если закроете каждый из них, который начинаете.
ПРИМЕЧАНИЕ. Жирным шрифтом отображается ** текст ** - просто убедитесь, что вы избавились от двойных звездочек:)