Не полная серилизация класса - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! В общем, у меня есть "небольшая" проблема. Не все параметры сохраняются в ini файле(_default_backcolor). А теперь, подробнее: Мне нужно как то сохранять настройки программы. И решив пойти "наиболее простым" путём я решил просто использовать "серилизацию". Ещё не со всем разобрался, если честно... Но в общем. В моём классе настроек(Cl_Settings) есть параметры того, как надо отображать изображение при тех или иных ситуациях. Так же, там есть параметр цвета заднего фона. Вот именно этот параметр и не сохраняется в настройках. Быть может, я чего то не знаю, или что то не так делаю, но используя тот пример, что я нашёл у меня вышло нечто подобное:
       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);
        }
И вот содержание файла Settings.ini:
<?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>
Как мне сделать так, чтобы _default_BackColor сохранить и считать из Settings.ini?
И да, можно ли удалить "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();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.462 из 5
Похожие ответы