J'ai un tableau d'éléments que j'ai besoin de sérialiser en utilisant XmlSerializer. Le problème que j'ai est que j'ai 2 classes dérivées, et les sérialiser pour qu'elles aient un nom d'élément de la base commune, ne semble pas fonctionner.Sérialisation XML des classes dérivées
Alors, voici comment le XML devrait ressembler à:
<Root>
<Base> foo </Base>
</Root>
Au lieu de cela, je reçois
<Root>
<Derived1> foo </Derived1>
</Root>
Le code pour le tableau des éléments que je suis sérialisation est
private object[] m_nodes;
[System.Xml.Serialization.XmlElementAttribute("Base", typeof(Derived1)]
[System.Xml.Serialization.XmlElementAttribute("Base", typeof(Derived2)]
public object[] Nodes
{
get
{
return this.m_nodes;
}
set
{
this.m_nodes = value;
}
}
Avec le code ci-dessus, j'obtiens qu'il y a une erreur de réflexion avec les nœuds. Si je change "Base" dans les deux XmlEelementAttributes à "Derived1" et Derived2" , cela fonctionne, mais le nom de l'élément est incorrect.
[System.Xml.Serialization.XmlInclude(typeof(Derived1))]
public abstract class Base
{
public Base()
{
}
}
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public class Derived1: Base
{
public Derived1()
{
}
}
Toute aide est grandement appréciée. Merci beaucoup.
Merci. La vôtre et les réponses de David ont du sens maintenant que je les considère du point de vue de la nécessité de les désérialiser aussi.Je pense que j'avais supposé qu'il y avait un moyen de spécifier cela depuis quelque attribut = "Derived1" dans le XML, que je pourrais dire manuellement quel objet créer. – mfanto