J'essaie de sérialiser une classe qui dérive de BindingList (étage), où étage est une classe simple qui contient seulement une propriété étage. hauteurChamps publics/propriétés d'une classe dérivée de BindingList <T> coutume sérialisent
Voici une version simplifiée de ma classe
[Serializable]
[XmlRoot(ElementName = "CustomBindingList")]
public class CustomBindingList:BindingList<Floor>
{
[XmlAttribute("publicField")]
public string publicField;
private string privateField;
[XmlAttribute("PublicProperty")]
public string PublicProperty
{
get { return privateField; }
set { privateField = value; }
}
}
Je sérialiser une instance de CustomBindingList en utilisant le code suivant.
XmlSerializer ser = new XmlSerializer(typeof(CustomBindingList));
StringWriter sw = new StringWriter();
CustomBindingList cLIst = new CustomBindingList();
Floor fl;
fl = new Floor();
fl.Height = 10;
cLIst.Add(fl);
fl = new Floor();
fl.Height = 10;
cLIst.Add(fl);
fl = new Floor();
fl.Height = 10;
cLIst.Add(fl);
ser.Serialize(sw, cLIst);
string testString = sw.ToString();
Cependant testString termine au-dessus se défini sur le code XML suivant:
<CustomBindingList xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">
<Floor Height="10" />
<Floor Height="10" />
<Floor Height="10" />
</CustomBindingList>"
Comment puis-je obtenir "publicField" ou « publicProperty sérialiser ainsi
provenant de la classe presque toute collection de système est une * très mauvaise idée *. implémenter une interface ne s'étend pas. – ShuggyCoUk
Je ne voulais pas dériver de IBindingList parce que ce n'est pas générique, et je n'aime pas les collections non génériques où je dois transtyper sur mon vrai type d'objet chaque fois que je veux faire quelque chose. –
L'attribut '[Serializable]' est ignoré par XML Serialization. Vous devriez l'enlever. –