/ / XmlSerializer i właściwość Collection z prywatnym ustawiaczem - .net, serializacja xml

XmlSerializer i kolekcja z prywatnym ustawiaczem - .net, serializacja xml

Powiedz, że mam prostą klasę, taką jak ta

[Serializeable]
public class MyClass
{
public MyClass()
{
this.MyCollection = new List<int>();
}


public List<int> MyCollection { get; private set;}
}

Jeśli spróbuję deserializować to za pomocą XmlSerializerWystąpił błąd informujący, że MyCollection jest tylko do odczytu i nie można do niego przypisać. Nie chcę jednak ustawić odbiorcy jako publicznego, ponieważ może to spowodować różnego rodzaju problemy, jeśli użytkownik klasy to przypisze, FxCop słusznie ostrzega przed tym: Właściwości kolekcji powinny być tylko do odczytu

Jednak na dole strony w społeczności dodawana jest treść:

XmlSerializer rozumie tylko do odczytu kolekcje Kolekcja właściwości nie muszą być do odczytu i zapisu dla XmlSerializer do serializować i deserializować zawartość poprawnie. Będzie wyglądał XmlSerializer dla metody o nazwie Add on collection właściwości implementujące ICollection lub IEnumerable i używaj tego wypełnij kolekcję, gdy deserializowanie instancji właściciela rodzaj.

Jednak po prostu tak nie jest (jak jauzyskać 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?

Odpowiedzi:

14 dla odpowiedzi № 1

Twój prywatny seter jest przyczyną problemu. Klasa XmlSerializer będzie działać poprawnie w klasie, którą podałem poniżej. Klasa XmlSerializer została wymyślona przed wprowadzeniem seterów prywatnych, więc prawdopodobnie nie sprawdza tego poprawnie, gdy skanuje typ klasy za pomocą refleksji. Może powinieneś zgłosić to firmie Microsoft jako błąd.

public class MyClass
{
private List<int> _myCollection;

public MyClass()
{
_myCollection = new List<int>();
}

public List<int> MyCollection
{
get
{
return this._myCollection;
}
}
}