Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 4
.NET 3.x

XMLSerialization, сериализовать полученный List в файл XML

10.06.2012, 21:03. Показов 1370. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем пользователям форума

У меня тут такая проблема возникла. Вообщем у меня есть три класса (Item, Weapon, Armor). Weapon и Armor наследуют свойства Item. Еще у меня есть лист, в который нужно помещать объекты классов Weapon и Armor. Тип листа: Item. С помещением в лист предметов у меня не возникло, но сериализовать полученный лист в файл XML я не смог.

Класс Item:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[Serializable]
    public class Item
    {
        private string _name;
        private int _price;
        
        public Item(){
            _name = "Unnamed";
            _price = 0;
        }
        
        public Item(string name, int price){
            _name = name;
            _price = price;
        }
        
        public string Name {
            get{return _name;}
            set{_name = value;}
        }
        
        public string Price {
            get{return _price;}
            set{_price = value;}
        }
        
    }
Класс Weapon:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Serializable]
    public class Weapon : Item
    {
        private int _mindmg;
        private int _maxdmg;
        
        public int MinimalDamage{
            get{return _mindmg;}
            set{_mindmg = value;}
        }
        
        public int MaximalDamage{
            get{return _maxdmg;}
            set{_maxdmg = value;}
        }
    }
Класс Armor:

C#
1
2
3
4
5
6
7
8
9
10
[Serializable]
public class Armor : Item
    {
        private int _def;
        
        public int Defense {
            get{return _def;}
            set{_def = value;}
        }
    }
Метод, которым я сериализую лист:

C#
1
2
3
4
5
6
7
public void SaveItemList(string path)
        {
            FileStream filestream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
            XmlSerializer xmls = new XmlSerializer(typeof(List<Item>));
            xmls.Serialize(filestream, itemList);
            filestream.Close();
        }
Вот как то так. Очень надеюсь на вашу помощь

P.S: Библиотеки System.Xml.Serialization и System.IO подключены.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.06.2012, 21:03
Ответы с готовыми решениями:

Как сериализовать/десериализовать экземпляры классов в файл
Проблема следующая: Имеется три класcа: class Class1 { // Список полей и методов } class Class2 { // Список полей и...

Как можно сериализовать список сборок в файл?
Есть проект. На этапе его создания к нему подключаются определенные библиотеки dll. В итоге имеем список сборок, которые подключены к...

Сериализовать запрос в XML
надо сделать запрос к таблице в бд и результат сериализовать в XML, нагуглил связочку SqlDataAdapter + DataSet, но никак не пойму как...

6
Футболист
 Аватар для Goal
533 / 435 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
10.06.2012, 21:32
C#
1
2
3
4
System.Xml.Serialization.XmlSerializer writerRw = new System.Xml.Serialization.XmlSerializer(typeof(List<Item>));
            System.IO.StreamWriter fileRw = new System.IO.StreamWriter(Path);
            writerRw.Serialize(fileRw, itemList);
            fileRw.Close();
0
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 4
10.06.2012, 22:04  [ТС]
Не получилось, та же проблема. Может сможете направить так сказать в нужную сторону? Как лучше поступать при такой ситуации?
0
 Аватар для Unril
826 / 717 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
10.06.2012, 22:48
Попробуйте унаследовать от класса List<Item> свой класс и пометить его атрибутом XmlRootAttribute:
C#
1
2
[XmlRootAttribute("ItemCollection", IsNullable = false)]
public class ItemCollection:List<Item> {}
0
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 4
11.06.2012, 00:27  [ТС]
Стоп. Это какой класс нужно снабдить этим атрибутом и наследовать List<Item>? Если я правильно понял, то это мои классы Weapon и Armor. Так ведь?

UPD: Так, как я думал, не получилось. Не то что-то. Кстати. У меня есть класс ItemList.cs, который как раз за этот лист отвечает. Там были неработающие методы (де)сериализации,я их стер.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[Serializable]
    public class ItemList
    {
        private List<Item> itemList = new List<Item>();
        
        public int Count(){
            return itemList.Count;
        }
        
        public Item GetItem(int i) {
            return itemList[i];
        }
        
        public Item AddNewItem(Item item) {
            itemList.Add(item);
            return null;
        }
                
        public Item RemoveItem(Item item) {
            itemList.Remove(item);
            return null;
        }
        
        public Item FindItem(string name)
        {
            for (int i = 0; i < itemList.Count; i++)
            {
                if (itemList[i].Name == name)
                {
                    return itemList[i];
                }
            }
            return null;
        }
        
    }
0
Футболист
 Аватар для Goal
533 / 435 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
11.06.2012, 00:28
Цитата Сообщение от Behind1243 Посмотреть сообщение
Не получилось, та же проблема. Может сможете направить так сказать в нужную сторону? Как лучше поступать при такой ситуации?
при сериализации все поля и методы класса должны быть открыты
0
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 4
30.06.2012, 23:16  [ТС]
Проблема решена. Да, я наконец нашел то, что мне нужно. Извиняюсь, что слишком долго не отвечал т.к у меня просто не было времени. Кому интересно, загляните вот сюда
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.06.2012, 23:16
Помогаю со студенческими работами здесь

Как сериализовать элемент TreeView что бы сохранить его содержимое в XML файл?
Здравствуйте, как сохранить дерево TreeView? Возможно ли сохранить xaml код TreeView, а потом его загружать? Просто я делал считывание...

Как сериализовать и десериализовать xml файл
Как сериализовать и десериализовать такой файл. Будет считвааться файл, в котором будет изменено какое либо значение, и файл перезапишется....

Как сериализовать List<>?
Продолжаю писать свою игрушку... Решил сделать инвентарь через List&lt;Item&gt;, где Item -- класс предмета. Так вот, теперь сохранение через...

Сериализовать двумерный массив в XML
Есть класс с двумерным массивом: public class TestXML { public int Array=new int; } Объект этого...

Сериализовать/Десериализовать xml объект
Доброго времени суток, форумчане! Подскажите пожалуйста, как сериализовать/десериализовать xml объект вида &lt;root&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru