Не полная серилизация класса - C#
Формулировка задачи:
Здравствуйте!
В общем, у меня есть "небольшая" проблема. Не все параметры сохраняются в ini файле(_default_backcolor).
А теперь, подробнее:
Мне нужно как то сохранять настройки программы. И решив пойти "наиболее простым" путём я решил просто использовать "серилизацию". Ещё не со всем разобрался, если честно...
Но в общем. В моём классе настроек(Cl_Settings) есть параметры того, как надо отображать изображение при тех или иных ситуациях. Так же, там есть параметр цвета заднего фона. Вот именно этот параметр и не сохраняется в настройках.
Быть может, я чего то не знаю, или что то не так делаю, но используя тот пример, что я нашёл у меня вышло нечто подобное:
И вот содержание файла Settings.ini:
Как мне сделать так, чтобы _default_BackColor сохранить и считать из Settings.ini?
public class Cl_Settings
{
public System.Windows.Forms.FormWindowState _default_WindowState;
public System.Windows.Forms.ImageLayout _default_OnMaxWidth_ImageLayout;
public System.Windows.Forms.ImageLayout _default_OnMaxHeight_ImageLayout;
public System.Windows.Forms.ImageLayout _default_OnMaxSize_ImageLayout;
public System.Windows.Forms.ImageLayout _default_OnMinSize_ImageLayout;
public System.Boolean _default_TransparentBackColor;
public System.Boolean _default_CloseFormOnClick;
public System.Drawing.Color _default_BackColor;
public Cl_Settings()
{
this._default_WindowState = FormWindowState.Maximized;
this._default_OnMaxWidth_ImageLayout = ImageLayout.Zoom;
this._default_OnMaxHeight_ImageLayout = ImageLayout.Zoom;
this._default_OnMaxSize_ImageLayout = ImageLayout.Zoom;
this._default_OnMinSize_ImageLayout = ImageLayout.Center;
this._default_TransparentBackColor = false;
this._default_CloseFormOnClick = true;
this._default_BackColor = Color.Black;
}
}
private void LoadSettings()
{
XmlSerializer s = new XmlSerializer(typeof(Cl_Settings));
this._Settings = (Cl_Settings)s.Deserialize(new System.IO.FileStream("Settings.ini", System.IO.FileMode.Open));
}
private void SaveSettings()
{
XmlSerializer s = new XmlSerializer(typeof(Cl_Settings));
s.Serialize(new System.IO.FileStream("Settings.ini", System.IO.FileMode.Create), this._Settings);
}
<?xml version="1.0"?>
<Cl_Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<_default_WindowState>Maximized</_default_WindowState>
<_default_OnMaxWidth_ImageLayout>Zoom</_default_OnMaxWidth_ImageLayout>
<_default_OnMaxHeight_ImageLayout>Zoom</_default_OnMaxHeight_ImageLayout>
<_default_OnMaxSize_ImageLayout>Zoom</_default_OnMaxSize_ImageLayout>
<_default_OnMinSize_ImageLayout>Center</_default_OnMinSize_ImageLayout>
<_default_TransparentBackColor>false</_default_TransparentBackColor>
<_default_CloseFormOnClick>true</_default_CloseFormOnClick>
<_default_BackColor />
</Cl_Settings>
И да, можно ли удалить "xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema""(чтобы эта часть не сохранялась)(если это возможно)?
Решение задачи: «Не полная серилизация класса»
textual
Листинг программы
public static class XmlManager
{
public static T Load<T>(string path) where T : class
{
if (!File.Exists(path))
throw new FileNotFoundException("File not found", path);
using (var fstream = File.OpenRead(path))
{
var serialiser = new XmlSerializer(typeof(T));
serialiser.UnknownAttribute += (o, e) => {
Console.WriteLine("Unknown attribute: {0} at line: {1} position: {2}",
e.Attr, e.LineNumber, e.LinePosition);
};
serialiser.UnknownElement += (o, e) => {
Console.WriteLine("Unknown Element: {0} at line: {1} position: {2}",
e.Element, e.LineNumber, e.LinePosition);
};
return (T)serialiser.Deserialize(fstream);
}
}
public static void Save<T>(string path, T obj) where T : class
{
if (string.IsNullOrWhiteSpace(path))
throw new ArgumentNullException("path");
if (obj == null)
throw new ArgumentNullException("obj");
using (var fstream = File.Open(path, FileMode.Create))
{
var serialiser = new XmlSerializer(typeof(T));
serialiser.Serialize(fstream, obj);
fstream.Flush();
}
}
}