Dire que j'ai une classe simple comme siXmlSerializer et Collection propriété avec setter privé
[Serializeable]
public class MyClass
{
public MyClass()
{
this.MyCollection = new List<int>();
}
public List<int> MyCollection { get; private set;}
}
Si je tente de désérialiser cela en utilisant XmlSerializer je reçois une erreur disant que MyCollection est en lecture seule et ne peut pas être affecté. Cependant je ne veux pas rendre le setter public car cela peut causer toutes sortes de problèmes si l'utilisateur de la classe lui assigne. FxCop met en garde à juste titre contre ceci: Collection properties should be read only
Cependant au bas de la page dans la communauté contenu ajouté est le suivant:
XmlSerializer COMPREND lecture seule collections Collection propriétés ne doivent pas être en lecture écrire pour le XmlSerializer à sérialiser et désérialiser le contenu correctement. Le XmlSerializer regardera une méthode appelée Ajouter à la collecte propriétés qui mettent en œuvre ICollection ou IEnumerable, et l'utiliser pour remplir la collection lorsque désérialisation une instance du propriétaire de type .
Cependant, cela ne semble pas être le cas (car j'obtiens le InvalidOperationException). Qu'est-ce que je suis capable de faire qui obéit à la meilleure pratique de garder le setter de propriété privée tout en me permettant d'utiliser le XmlSerializer?
Bravo, qui l'a fixé. – Ray
Quel bogue horrible. Je me demande si c'est corrigé en 4 ... – Will
Ce bug (fonctionnalité?) Est toujours présent dans .NET 4 :( – drumsta