Скажем, у меня такой простой класс
[Serializeable]
public class MyClass
{
public MyClass()
{
this.MyCollection = new List<int>();
}
public List<int> MyCollection { get; private set;}
}
Если я попытаюсь десериализовать это с помощью XmlSerializer, я получаю сообщение об ошибке, указывающее, что MyCollection доступен только для чтения и не может быть назначен. Однако я не хочу, чтобы сеттер был общедоступным, так как это может вызвать всевозможные проблемы, если пользователь класса назначает ему. FxCop справедливо предупреждает об этом: Свойства коллекции должны быть прочитаны только
Однако в нижней части страницы добавленного контента сообщества:
XmlSerializer понимает только для чтения коллекции коллекции свойства не обязательно должны быть read-write для XmlSerializer для сериализовать и десериализовать содержимое правильно. XmlSerializer будет выглядеть для метода под названием Add on collection свойства, реализующие ICollection или IEnumerable, и использовать это для заполнять коллекцию, когда десериализация экземпляра владельца тип.
Однако это, похоже, не так (поскольку я получаю InvalidOperationException). Что я могу сделать, чтобы повиноваться наилучшей практике сохранения свойства setter private, все еще позволяя мне использовать XmlSerializer?