У меня есть класс, который я использую как класс настроек, сериализованный в 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; }
}
}