Не полная серилизация класса - 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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д