Say mam prostą klasę podobnie jakXmlSerializer i własność prywatna kolekcja seter
[Serializeable]
public class MyClass
{
public MyClass()
{
this.MyCollection = new List<int>();
}
public List<int> MyCollection { get; private set;}
}
Gdy próbuję deserializowania to przy użyciu XmlSerializer otrzymuję komunikat o błędzie informujący, że MyCollection jest tylko do odczytu i nie można przypisać. Nie chcę jednak ustawiać odbiorcy jako publicznego, ponieważ może to spowodować różnego rodzaju problemy, jeśli użytkownik klasy przydzieli mu to zadanie. FxCop słusznie ostrzega przed tym: Collection properties should be read only
Jednak na dole strony we wspólnocie dodana treść jest taka:
XmlSerializer rozumie tylko do odczytu kolekcje Kolekcja właściwości nie muszą być do odczytu napisać dla XmlSerializer do serializować i deserializować zawartość poprawnie. XmlSerializer będzie wyglądać na metodzie zwanej Dodaj na kolekcji właściwości, które implementują kolekcji ICollection lub IEnumerable i używać, aby wypełnić kolekcji gdy deserializacji wystąpienie właściciela typu.
Jednak tak się nie dzieje (ponieważ otrzymuję wyjątek InvalidOperationException). Co mogę zrobić, jeśli przestrzega się najlepszej praktyki utrzymywania prywatnego właściciela nieruchomości, a jednocześnie pozwala mi korzystać z XmlSerializer?
Pozdrawiam, to naprawiłem. – Ray
Co za okropny błąd. Ciekawe czy jest naprawione w 4 ... – Will
Ten błąd (funkcja?) Nadal występuje w .NET 4 :( – drumsta