J'essaie de sérialiser une classe qui hérite d'une classe de base qui implémente IXmlSerializable.Comment revenir à la sérialisation XML 'par défaut' lors de l'implémentation de IXmlSerializable dans une classe de base?
La classe de base, appelée PropertyBag est une classe qui autorise les propriétés dynamiques (credits to Marc Gravell).
J'ai implémenté IXmlSerializable de sorte que les propriétés dynamiques (stockées dans un dictionnaire) soient écrites en tant qu'éléments xml normaux.
par exemple. Lors de la sérialisation une personne de classe avec une propriété publique (non dynamique) Nom et âge de la propriété dynamique, je voudrais que pour générer le code XML suivant:
<Person>
<Name>Tim</Name>
<DynamicProperties>
<Country>
<string>USA</string>
</Country>
</DynamicProperties>
<Person>
je peux obtenir la pièce à travailler avec la mise en œuvre suivante de WriteXml dans la classe de base PropertyBag:
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteStartElement("DynamicProperties");
// serialize every dynamic property and add it to the parent writer
foreach (KeyValuePair<string, object> kvp in properties)
{
writer.WriteStartElement(kvp.Key);
StringBuilder itemXml = new StringBuilder();
using (XmlWriter itemWriter = XmlWriter.Create(itemXml))
{
// serialize the item
XmlSerializer xmlSer = new XmlSerializer(kvp.Value.GetType());
xmlSer.Serialize(itemWriter, kvp.Value);
// read in the serialized xml
XmlDocument doc = new XmlDocument();
doc.LoadXml(itemXml.ToString());
// write to modified content to the parent writer
writer.WriteRaw(doc.DocumentElement.OuterXml);
}
writer.WriteEndElement();
}
writer.WriteEndElement();
}
Cependant, lors de la sérialisation la classe personne, il ne sérialise les propriétés normales (non dynamique) à moins que j'Ecraser la méthode WriteXml en personne (que je ne veux pas faire). Est-il possible que dans la classe de base, je peux ajouter automatiquement les propriétés statiques? Je sais que je peux le faire manuellement en utilisant la réflexion, mais je me demandais s'il y a une fonctionnalité intégrée dans le. Net Framework?
Je pense que vous devriez éviter le mot "statique", car cela a une autre signification (très différente) ... –