Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Сериализация объектов


Автор: MedvedDima 15.12.2009, 21:41
Здравствуйте! Вот такой вопрос возник у меня:
Есть программа, которая подключаеться к серверу и собирает запрос(по типу как в ацессе). Делаю сериализацию объектов (ComboBox.SelectedItem, ListBox.SelectedItem и CheckedListBox.CheckedItems), для того чтоб можно было востановить запрос позже. Но при попытке сериализации выскакивает ошибка "Для объекта ComboBox.SelectedItem(ListBox.SelectedItem, CheckedListBox.CheckedItems) не указан атрибут Serializable". Как быть в данной ситуации?

класс в котором все храниться:
Код

[Serializable]
    class DocumentSerialize
    {
        public Object database;
        public Object select;
        public Object from;
        public string query;

        public DocumentSerialize(Object db, Object slct, Object frm, string qry)
        {
            database = db;
            select = slct;
            from = frm;
            query = qry;
        }
    }



код попытки сериализации:
Код

DocumentSerialize serialObj = new DocumentSerialize(comboBox1.SelectedItem, select.CheckedItems, from.SelectedItem, query);

            FileStream f = new FileStream("dbworck.bin", FileMode.Create);
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(f, serialObj); // сохранение объекта d в потоке f
            f.Close();

Автор: MedvedDima 17.12.2009, 00:03
Сериализация объектов:
Код

private void button1_Click_1(object sender, EventArgs e)
        {
            saveFileDialog1.DefaultExt = "dbw";
            saveFileDialog1.AddExtension = true;            
            saveFileDialog1.OverwritePrompt = true;
            saveFileDialog1.Filter = "(*.dbw)|*.dbw";
            // открытие диалога сохранения файла
            saveFileDialog1.ShowDialog();
            if (saveFileDialog1.FileName != "")
            {
                // сохранение в масив индексов выделенных объектов в CheckedListBox
                int[] sel_index = new int[select.Items.Count];
                for (int i = 0; i < select.Items.Count; i++)
                {
                    if (select.GetItemChecked(i))
                    {
                        sel_index[i] = i;
                    }
                }
                // класс хранящий данные о выбраных параметрах запроса
                DocumentSerialize serialObj = new DocumentSerialize(comboBox1.SelectedItem, sel_index, from.SelectedItem, query);
                // файловый поток для создания файла
                FileStream f = new FileStream(saveFileDialog1.FileName, FileMode.Create);
                // объект для двоичной сериализации
                BinaryFormatter bf = new BinaryFormatter();
                // выполнение сериализации объекта
                bf.Serialize(f, serialObj);
                // закрытие файлового потока
                f.Close();
            }
        }


Десериализация объектов:
Код

private void button2_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "(*.dbw)|*.dbw";
            openFileDialog1.ShowDialog();
            if (openFileDialog1.FileName != "")
            {                                
                // файловый поток для создания файла
                FileStream f = new FileStream(openFileDialog1.FileName, FileMode.Open);
                // объект для двоичной сериализации
                BinaryFormatter bf = new BinaryFormatter();
                // выполнение десериализации объекта                
                DocumentSerialize serialObj = (DocumentSerialize)bf.Deserialize(f);
                // закрытие файлового потока
                f.Close();
                
                comboBox1.SelectedItem = serialObj.database;                
                from.SelectedItem = serialObj.from;                
                for (int i = 0; i < serialObj.select.Length; i++)
                {                    
                    select.SetItemChecked(serialObj.select[i], true);                    
                }                  
            }
        }        

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)