У меня есть класс, который я использую в качестве класса настроек, который сериализован в XML-файл, который администраторы могут затем редактировать для изменения настроек в приложении. (Настройки немного сложнее, чем позволяет App.config.)
Я использую класс XmlSerializer для десериализации XML-файла и хочу, чтобы он мог устанавливать класс свойства, но я не хочу, чтобы другие разработчики, использующие класс / сборку, могли устанавливать / изменять свойство через код. Можно ли это сделать с помощью класса XmlSerializer?
Чтобы добавить еще несколько деталей: этот конкретный класс является коллекцией, и, согласно FxCop, класс XmlSerializer имеет специальную поддержку десериализации коллекций только для чтения, но я не смог найти больше информации о нем. Точные данные о правиле, которое это нарушает:
Свойства, возвращающие коллекции, должны быть доступны только для чтения, чтобы пользователи не могли полностью заменить резервное хранилище. Пользователи по-прежнему могут изменять содержимое коллекции, вызывая соответствующие методы в коллекции. Обратите внимание, что класс XmlSerializer имеет специальную поддержку для десериализации коллекций только для чтения. См. Обзор XmlSerializer для получения дополнительной информации.
Это именно то, что я хочу, но как это сделать?
Редактировать: Хорошо, я думаю, что схожу с ума здесь. В моем случае все, что мне нужно было сделать, это инициализировать объект Collection в конструкторе, а затем удалить установщик свойств. Тогда объект XmlSerializable фактически знает, как использовать свойства Add / AddRange и indexer в объекте Collection. Следующее действительно работает!
public class MySettings
{
private Collection<MySubSettings> _subSettings;
public MySettings()
{
_subSettings = new Collection<MySubSettings>();
}
public Collection<MySubSettings> SubSettings
{
get { return _subSettings; }
}
}