Admin
27.11.2016

Новый проект от создателей этого поратала
Во время исполнения программы часто используемые переменные, логично хранить в виде статическ… их компонент доступного всем класса. Единственный вопрос, встающий при использовании такого подхода — как можно все это сохранить в XML.
Применение сериализации в данном контексте не совсем тривиально, по тому, я решил поделиться этим «изобретением». Изобретение, по тому, что в сети на этот счет я ничего полезного не нашел. А то, что все же несколько похоже и применимо, для сохранения статических компонент класса, подразумевает использование DataSet, что способствует повышению фактора быдлокодинга в ваших программах.
И так, у нас есть класс:
Доступ к его полям в программе выглядит примерно так:
Удобнее наверное и не придумаешь.
Чтобы класс был сереализуемым нужно добавить конструктор по умолчанию, и открытые не статические свойства, для каждого статического поля:
[XmlElement(«bufferSize»)]
public int BufferSize
{
get { return bufferSize; }
set { bufferSize = value; }
}
[XmlElement(«sampleRate»)]
public int SampleRate
{
get { return sampleRate; }
set { sampleRate = value; }
}
AudioFormat() { }
}
Теперь, собственно пришло время написать функции Load и Save, которые у нас будут также статическими:
FileStream fs = new FileStream(file_name, FileMode.Create);
StreamWriter stmw = new StreamWriter(fs);
stmw.Write(sxml);
stmw.Close();
fs.Close();
}
public static void Load(string file_name)
{
FileStream fs = new FileStream(file_name, FileMode.Open);
StreamReader strr = new StreamReader(fs);
string sxml = strr.ReadToEnd();
fs.Close();
AudioFormat af = new AudioFormat();
StringReader reader = new StringReader(sxml);
XmlSerializer serializer = new XmlSerializer(af.GetType());
af = (AudioFormat)serializer.Deserialize(reader);
}
Изюминка этого кода в том, что мы в статической функции создаем временный объект нашего класса, который сериализуется/десериализуется сохраняя через нестатические свойства все статические поля. Таким образом наша цель, сохранение статических полей класса в XML, достигнута!