Я попробовал и опробовал способ разработки класса контейнера настроек.
Этот контейнерный класс может иметь подклассы для разных типов категорий настроек.
Это работает хорошо, так как вы ссылаетесь на свои «настройки» через имя свойства, и поэтому, если что-то изменится в будущем, вы получите ошибки времени компиляции. Это также расширяемо, поскольку вы всегда можете создавать новые настройки, добавляя дополнительные свойства к вашим индивидуальным классам настроек и назначая значения по умолчанию для закрытой переменной свойства, которое будет использоваться, если этот конкретный параметр не существует в более старой версии вашего приложения. После сохранения нового контейнера новые настройки также будут сохранены.
Другим преимуществом является очевидная читаемость XML для человека / компьютера, что хорошо для настроек.
Для сохранения сериализуйте объект контейнера в данные XML, затем запишите данные в файл. Для загрузки прочитайте данные из файла и десериализируйте обратно в класс контейнера настроек.
Для сериализации через стандартный код C #:
public static string SerializeToXMLString(object ObjectToSerialize)
MemoryStream mem = new MemoryStream();
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(ObjectToSerialize.GetType());
ser.Serialize(mem,ObjectToSerialize);
ASCIIEncoding ascii = new ASCIIEncoding();
return ascii.GetString(mem.ToArray());
Для десериализации с помощью стандартного кода C #:
public static object DeSerializeFromXMLString(System.Type TypeToDeserialize, string xmlString)
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(xmlString);
MemoryStream mem = new MemoryStream(bytes);
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(TypeToDeserialize);
return ser.Deserialize(mem);
Еще одна приятная вещь о сериализуемых классах настроек - это то, что это объект, вы можете использовать IntelliSense для быстрого перехода к определенной настройке.
Примечание. После создания экземпляра класса контейнера настроек вы должны сделать его статическим свойством другого статического класса управления (вы можете назвать его SettingsManager, если хотите)
Этот управляющий класс позволяет вам получать доступ к вашим настройкам из любого места в вашем приложении (поскольку оно статическое), а также вы можете иметь статические функции для обработки загрузки и сохранения класса.