Думаю перед каждым разработчиком рано или поздно встает вопрос сериализации статического класса в XML. Это достаточно удобная практика. Часто нужно хранить конфигурации программы, или переносить данные между программами. ХМЛ формат для этого - идеальное решение. Формат является универсальным и не зависит от платформы. Выгоды очевидны.
Проще всего файлы конфигурацию реализовать в виде статического класса, который был бы доступен в программе из любого места.
Однако, есть проблема:XmlSerializer не может сериализировать статические классы. Задача - обойти это ограничение.
Решение: реализовать класс с помощью паттерна Singleton.
[XmlRoot(elementName:"Settings")]
public classSettings
{
private staticSettings _instance;
private Settings() {//Если необходимо - реализовать конструктор}
//Реализация Singleton
public staticSettings Instance
{
get
{
if (_instance == null)
{
_instance = newSettings();
}
return _instance;
}
}
[XmlElement("AnySetting")]
public string anyVariable;
//Реализация сериализации
private bool CreateConfigFile()
{
var serializer = new XmlSerializer(typeof (Settings));
using (var myWriter = newStreamWriter(ConfigFilePath))
{
serializer.Serialize(myWriter, _instance);
}
}
//Реализация десериализации
var serializer = new XmlSerializer(typeof (Settings));
using (var reader = new StreamReader(ConfigFilePath))
{
Settings deserialize = (Settings) serializer.Deserialize(reader);
anyVariable = deserialize.CurrentLocalization;
}
}
Далее видоизменяем данный шаблон как нужно, добавляя обработку исключительных ситуаций, дополнитеольные поля и т.д. Таким образом, подобный пример можно считать хорошей заменой сериализации статического класса в XML C#.
|