Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2015, 03:18   #1
_taz_
 
Регистрация: 08.01.2015
Сообщений: 4
По умолчанию Сохранение и чтение объектов класса в/из Xml файл

нужно сохранить значение классов в xml файл

описание одного из классов
Код:
class AnimalTip
    {
        private string _name_tip; //название типа
        private string _inform; //инфо о типе
        private string _habitat; //среда обитания
 
        public AnimalTip(string name_tip, string inform, string habitat)
        {
            _name_tip = name_tip;
            _inform = inform;
            _habitat = habitat;
        }
 
        public AnimalTip()
        {
        }
 
        public string Name_Tip
        {
            get { return _name_tip; }
            set { _name_tip = value; }
        }
 
        public string Inform
        {
            get { return _inform; }
            set { _inform = value; }
        }
 
        public string Habbitat
        {
            get { return _habitat; }
            set { _habitat = value; }
        }
заполнение этого класса
Код:
tipAnimalList.Add(new AnimalTip("Хордовые", "Тип 4300 видов", "Вода, Суша"));
            tipAnimalList.Add(new AnimalTip("Членистоноогие", "Тип  взятых.", "Вода, Наземно-воздушная, Почва"));
код сохранения в xml файл
Код:
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    FileStream stream = new FileStream(this.saveFileDialog1.FileName, FileMode.Create);
                    XmlSerializer serializer = new XmlSerializer(typeof(List<AnimalTip>));
                    serializer.Serialize(stream, tipAnimalList);
                    XmlSerializer serializer1 = new XmlSerializer(typeof(List<ClassAnimal>));
                    serializer1.Serialize(stream, classAnimalList);
                    XmlSerializer serializer2 = new XmlSerializer(typeof(List<GroupAnimal>));
                    serializer2.Serialize(stream, groupAnimalList);
                    XmlSerializer serializer3 = new XmlSerializer(typeof(List<FamilyAnimal>));
                    serializer3.Serialize(stream, familyAnimalList);
                    stream.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString(), "Ошибка создания файла!");
                }
            }
кода открытия файла
Код:
private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    FileStream stream = new FileStream(this.openFileDialog1.FileName, FileMode.Open);
                    XmlSerializer serializer = new XmlSerializer(typeof(List<AnimalTip>));
                    tipAnimalList = serializer.Deserialize(stream) as List<AnimalTip>;
                    XmlSerializer serializer1 = new XmlSerializer(typeof(List<ClassAnimal>));
                    classAnimalList = serializer1.Deserialize(stream) as List<ClassAnimal>;
                    XmlSerializer serializer2 = new XmlSerializer(typeof(List<GroupAnimal>));
                    groupAnimalList = serializer2.Deserialize(stream) as List<GroupAnimal>;
                    XmlSerializer serializer3 = new XmlSerializer(typeof(List<FamilyAnimal>));
                    familyAnimalList = serializer3.Deserialize(stream) as List<FamilyAnimal>;
                    stream.Close();
                    fillingTreeView();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString(), "Ошибка чтения файла!");
                }
            }
        }
ошибка при чтении файла:

Прошу помощи, что не так делаю, заранее благодарю
_taz_ вне форума Ответить с цитированием
Старый 08.01.2015, 08:56   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ошибка-то какая именно?

UPD: не надо тут выкладывать атачменты с киберфорума. Они только после просмотра на киберфоруме видны.
И вообще не надо такое выкладывать картинкой. Нажмите CTRL+C и скопируется текст из месседжбокса.

По-моему нельзя так несколько объектов (списков) в один файл сериализовывать.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 08.01.2015 в 09:07.
Alex11223 вне форума Ответить с цитированием
Старый 08.01.2015, 12:58   #3
_taz_
 
Регистрация: 08.01.2015
Сообщений: 4
По умолчанию

переделал запись в файл
Код:
FileStream stream = new FileStream(this.saveFileDialog1.FileName, FileMode.Create);
                    Type[] seril = { typeof(List<AnimalTip>), typeof(List<ClassAnimal>), typeof (List<GroupAnimal>), typeof (List<FamilyAnimal>) };
                    object[] ser = { tipAnimalList, classAnimalList, groupAnimalList, familyAnimalList };
                    TextWriter text = new StreamWriter(stream);
                    for (int i = 0; i < seril.Length; i++)
                    {
                        XmlSerializer serilaizer = new XmlSerializer(seril[i]);
                        serilaizer.Serialize(text, ser[i]);
                    }
                    text.Close();
по такому же принципу реализовал чтение из него
Код:
FileStream stream = new FileStream(this.openFileDialog1.FileName, FileMode.Open);
                    Type[] seril = { typeof(List<AnimalTip>), typeof(List<ClassAnimal>), typeof(List<GroupAnimal>), typeof(List<FamilyAnimal>) };
                    object[] ser = { tipAnimalList, classAnimalList, groupAnimalList, familyAnimalList };
                    TextReader text = new StreamReader(stream);
                    for (int i = 0; i < seril.Length; i++)
                    {
                        XmlSerializer deserializer = new XmlSerializer(seril[i]);
                        
                        if (i == 0) ser[0] = (List<AnimalTip>)deserializer.Deserialize(text);
                        if (i == 1) ser[1] = (List<ClassAnimal>)deserializer.Deserialize(text);
                        if (i == 2) ser[2] = (List<GroupAnimal>)deserializer.Deserialize(text);
                        if (i == 3) ser[3] = (List<FamilyAnimal>)deserializer.Deserialize(text);
                    }
                    text.Close();
но всё та же ошибка посещает меня
2222222янный.jpg
_taz_ вне форума Ответить с цитированием
Старый 08.01.2015, 13:17   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Потому что нельзя так запихивать несколько xml-ов в один файл. .Deserialize не разделяет их так, как вы хотите, а сразу читает весь файл.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 08.01.2015, 13:25   #5
_taz_
 
Регистрация: 08.01.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Потому что нельзя так запихивать несколько xml-ов в один файл. .Deserialize не разделяет их так, как вы хотите, а сразу читает весь файл.
а как же сделать если нужно сделать запись в xml и чтение из него, так при том что бы ещё при открытии дерево безошибочно заполнялось
_taz_ вне форума Ответить с цитированием
Старый 08.01.2015, 13:51   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Самый простой вариант — писать каждый список в свой файл.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 08.01.2015, 15:01   #7
sauwork
Пользователь
 
Аватар для sauwork
 
Регистрация: 02.01.2015
Сообщений: 12
По умолчанию

Или , обернуть списки в отдельный класс списков , и уже его сериализовать.
почта: sauwork@yandex.ru , телега: @sauwork
sauwork вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение/чтение в нетипизированный файл массива используя потоки sanji2010 Общие вопросы Delphi 5 12.11.2014 21:14
Чтение, визуализация и манипуляция графа из XML файл LENA_M Общие вопросы .NET 1 27.01.2014 12:56
Чтение/запись массива объектов в файл MrBrain Общие вопросы .NET 0 08.06.2010 10:44
Проекция файла и запись/чтение объектов класса в C++ sd13 Помощь студентам 26 25.05.2008 12:05
TEdit сохранение в файл и чтение при загрузке Casper-SC Помощь студентам 7 05.07.2007 03:16