Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/40: Рейтинг темы: голосов - 40, средняя оценка - 4.73
1 / 1 / 2
Регистрация: 18.08.2010
Сообщений: 76

Запись и чтение XML

21.10.2011, 16:02. Показов 7675. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно сохранить в XML файл объект класса CPolygon, через saveFileDialog. Как это можно сделать?
C#
1
2
3
4
5
6
7
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //сохранение в XML
            }
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace Polygons
{
    [Serializable]
    public class CPolygon
    {
        public CPolygon(List<CLine> lines, List<Point> points)
        {
            Lines = lines;
            Points = points;
        }
 
        public List<CLine> Lines { get; set; }
        public List<Point> Points { get; set; } 
    }
}
CLine
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace Polygons
{    
    public class CLine
    {
        public CLine(Point pt1, Point pt2)
        {
            Begin = pt1;
            End = pt2;
        }
 
        public Point Begin { get; set; }
        public Point End { get; set; }
    }
}
Заранее благодарен
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.10.2011, 16:02
Ответы с готовыми решениями:

Чтение и запись xml
Здравствуйте. Есть .xml файлик, в котором есть один параметр. &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;head&gt; ...

Чтение и запись xml файла
Есть xml файл устроеный следущим образом: &lt;Persons&gt; &lt;person&gt; &lt;name&gt; ... &lt;/name&gt; &lt;date&gt; ... &lt;/date&gt; &lt;/person&gt; ...

Запись и чтение структуры из XML
Здравствуйте. Есть структура: struct Bluda { public int Id; public string Nazvanie; public...

19
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
21.10.2011, 21:42
Используйте System.Xml.Serialization.XmlSerializer
C#
1
2
var serializer = new XmlSerializer(typeof(CPolygon));
serializer.Serialize(someFileStream, myPolygon);
И можете убрать аттрибут [Serializable]

Если сериализировать собираетесь много раз за время работы программы, рекомендую создавать объект XmlSerializer один раз при запуске или при первой сериализации, т.к. создание этого объекта - довольно дорогое удовольствие.
1
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
21.10.2011, 23:15
kolorotur, А вот и нет
Он кешируется сам, действительно создается он только 1 раз для конкретного типа
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
22.10.2011, 11:36
m0nax, как часто бывает, отчасти правы вы, отчасти неправ я.
При использовании конструкторов с аргументами Type или Type, String - да, сборка создается один раз и потом повторно используется для данного типа.
При использовании других конструкторов, каждый раз создается новая копия сборки и не выгружается автоматически, что приводит к деградации производительности и утечки памяти.

Цитата с MSDN:
To increase performance, the XML serialization infrastructure dynamically generates assemblies to serialize and deserialize specified types. The infrastructure finds and reuses those assemblies. This behavior occurs only when using the following constructors:

XmlSerializer.XmlSerializer(Type)

XmlSerializer.XmlSerializer(Type, String)

If you use any of the other constructors, multiple versions of the same assembly are generated and never unloaded, which results in a memory leak and poor performance. The easiest solution is to use one of the previously mentioned two constructors. Otherwise, you must cache the assemblies in a Hashtable
0
1 / 1 / 2
Регистрация: 18.08.2010
Сообщений: 76
28.10.2011, 22:36  [ТС]
C#
1
2
3
4
5
6
7
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                FileStream stream = new FileStream(this.saveFileDialog1.FileName, FileMode.Create);
                XmlSerializer serializer = new XmlSerializer(typeof(List<CPolygon>));//ошибка
                serializer.Serialize(stream, DesktopPolygons);
                stream.Close();
            }
Пытаюсь сереализовать список выскакивает такая ошибка:
There was an error reflecting type 'System.Collections.Generic.List`1
[Polygons.CPolygon]'.

Что не так и как исправить?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
28.10.2011, 23:23
Цитата Сообщение от Anish Посмотреть сообщение
Что не так и как исправить?
Когда XmlSerializer выбрасывает исключение, он очень подробно описывает что пошло не так.
Ловите исключение в отладчике и разворачивайте свойства InnerException, пока они не станут null и смотрите значения Message.
Все сразу станет ясно.

Как найдете - запостите сюда, а то интересно.
0
1 / 1 / 2
Регистрация: 18.08.2010
Сообщений: 76
29.10.2011, 12:45  [ТС]
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
29.10.2011, 13:30
Вот и ваш ответ.
Одно из требований к классу для сериализации его через XmlSerializer - наличие дефолтного конструктора; то есть конструктора, не принимающего никаких параметров.
0
1 / 1 / 2
Регистрация: 18.08.2010
Сообщений: 76
29.10.2011, 13:32  [ТС]
C#
1
2
3
public CPolygon()
        {            
        }
т.е. такого?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
29.10.2011, 17:57
Так точно
0
1 / 1 / 2
Регистрация: 18.08.2010
Сообщений: 76
29.10.2011, 17:58  [ТС]
он присутствует, но ничего не меняется(
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
29.10.2011, 18:40
Выбрасывает такое же исключение?
0
1 / 1 / 2
Регистрация: 18.08.2010
Сообщений: 76
29.10.2011, 18:44  [ТС]
да, точно такое же.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
29.10.2011, 18:57
Выложите сюда код класса CPolygon - глянем что там у вас не так
0
1 / 1 / 2
Регистрация: 18.08.2010
Сообщений: 76
29.10.2011, 18:58  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class CPolygon
    {
        public CPolygon(List<CLine> lines, List<Point> points)
        {
            Lines = lines;
            Points = points;
        }
 
        public CPolygon()
        {
            
        }
 
        public List<CLine> Lines { get; set; }
        public List<Point> Points { get; set; } 
    }
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
29.10.2011, 19:02
А как выглядят классы CLine и Point?
0
1 / 1 / 2
Регистрация: 18.08.2010
Сообщений: 76
29.10.2011, 19:06  [ТС]
CLine как в 1ом посте, Point стандартный из Drawing.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
29.10.2011, 19:23
Цитата Сообщение от Anish Посмотреть сообщение
CLine как в 1ом посте
Так этому класссу тоже дефолтный конструктор нужен.
Вы посмотрите внимательнее на исключение: раньше оно ругалось на CPolygon, а сейчас наверняка ругается на CLine
1
1 / 1 / 2
Регистрация: 18.08.2010
Сообщений: 76
29.10.2011, 19:39  [ТС]
Спасибо большое.
Теперь бы еще разобраться с чтением из файла)
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
29.10.2011, 19:47
С чтением тоже все просто:

C#
1
2
3
4
5
6
7
if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                FileStream stream = new FileStream(this.openFileDialog1.FileName, FileMode.Open);
                XmlSerializer serializer = new XmlSerializer(typeof(List<CPolygon>));
                DesktopPolygons = serializer.Deserialize(stream) as List<CPolygon>;
                stream.Close();
            }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.10.2011, 19:47
Помогаю со студенческими работами здесь

XML-файлы,запись и чтение
Нужно создать в консольном приложении XML-файл и заполнить его случайными числами,а потом сделать функцию для чтения этого файла и вывести...

Чтение из xml, запись в csv
Здравствуйте, товарищи, помогите разобраться с несколькими проблемами. Нужно написать программку, вытаскивающую нужную инфу из xml...

Запись и чтение из XML файла
У меня есть список элементов, из этого списка я хочу выборочно записывать данные в XML файл. Список состоит из таких данных: ...

Запись и чтение xml файла в datagrid
Здравствуйте, пытаюсь сделать сохранение и вывод информации в datagrid. Но ничего не сохраняется в файл. Помогите, пожалуйста. ...

Запись/чтение в поток/из потока xml
Как можно записать xml-код, сгенерированный программно, в поток и считать после. Сохраняю так: Stream s; public XmlDocument doc =...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru