Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
3 / 3 / 1
Регистрация: 05.06.2019
Сообщений: 75

Сериализация массива коллекций ObservableCollection в xml

25.10.2019, 13:42. Показов 1163. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток,

Имеется три коллекции ObservableCollection<MyClass>, в которых хранятся экземпляры класса MyClass:
C#
1
2
3
public ObservableCollection<MyClass> Collection1 { get; set; }
public ObservableCollection<MyClass> Collection2 { get; set; }
public ObservableCollection<MyClass> Collection3 { get; set; }
Сериализация этих коллекций по отдельности (каждая в свой xml файл) вопросов не вызывает, всё работает:
C#
1
2
3
4
5
6
7
            XmlSerializer xmlFormater = new XmlSerializer(typeof(ObservableCollection<MyClass>));
            using (var file = new FileStream("Collection1.xml", FileMode.OpenOrCreate))
            {
                xmlFormater.Serialize(file, Collection1);
            }
 
            // И аналогично другие коллекции.
Но, нужно все данные держать не в нескольких xml файлах, а в одном общем. Я попробовал создать массив коллекций:
C#
1
2
3
4
public ObservableCollection<MyClass>[] AllCollections = new ObservableCollection<MyClass>[3];
AllCollections[0] = Collection1;
AllCollections[1] = Collection2;
AllCollections[2] = Collection3;
Но вот так сериализация не работает:
C#
1
2
3
4
5
            XmlSerializer xmlFormater = new XmlSerializer(typeof(ObservableCollection<MyClass>[]));
            using (var file = new FileStream("AllCollections.xml", FileMode.OpenOrCreate))
            {
                xmlFormater.Serialize(file, AllCollections);
            }
Вылетает исключение: NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.

В чём мои ошибки?

П.С. Так же пробовал сериализовать массив с экземплярами MyClass, всё нормально сериализуется. Получается что коллекция объектов и массив объектов сериализуются. А вот массив коллекций не получается сериализовать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.10.2019, 13:42
Ответы с готовыми решениями:

Сериализация ObservableCollection в xml в Universal App Win 10
Здравствуйте, не могу решить проблему при сериализации, выводится ошибка - &quot;System.UnauthorizedAccessException public sealed partial...

Сериализация-десериализация ObservableCollection
Здравствуйте, что то не могу разобраться с этим десериализатором, вроде выгрузил в файл а вот загрузить немогу public class...

Сериализация разнотипных коллекций с помощью BinaryFormatter
Привет всем! Подскажите пожалуйста как сериализовать две раснотипные коллекции в одном файле с помощью BinaryFormatter ?

2
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.10.2019, 19:21
Цитата Сообщение от dines22 Посмотреть сообщение
В чём мои ошибки?
Скорее всего в том, что вот этот код:
Цитата Сообщение от dines22 Посмотреть сообщение
C#
1
2
3
AllCollections[0] = Collection1;
AllCollections[1] = Collection2;
AllCollections[2] = Collection3;
Выполняется до того, как свойствам Collection1/2/3 присваивается какое-то значение.
0
3 / 3 / 1
Регистрация: 05.06.2019
Сообщений: 75
28.10.2019, 07:48  [ТС]
kolorotur, да вроде после, вот полный код:

MyClass:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;
 
namespace SerializationTest
{
    [Serializable]
    public class MyClass
    {
        public MyClass() {}
 
        public string ParamName { get; set; }
 
        public string ParamValue { get; set; }
    }
}
MainWindow:
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
37
38
39
40
41
42
43
44
45
using System.Collections.ObjectModel;
using System.IO;
using System.Windows;
using System.Xml.Serialization;
 
namespace SerializationTest
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public ObservableCollection<MyClass> Collection1 { get; set; }
        public ObservableCollection<MyClass> Collection2 { get; set; }
 
        public ObservableCollection<MyClass>[] AllCollections = new ObservableCollection<MyClass>[2];
 
        public MainWindow()
        {
            InitializeComponent();
 
            Collection1 = new ObservableCollection<MyClass>
            {
                new MyClass { ParamName = "1", ParamValue = "2" },
                new MyClass { ParamName = "3", ParamValue = "4" }
            };
 
            Collection2 = new ObservableCollection<MyClass>
            {
                new MyClass { ParamName = "5", ParamValue = "6" },
                new MyClass { ParamName = "7", ParamValue = "8" }
            };
 
            AllCollections[0] = Collection1;
            AllCollections[1] = Collection2;
 
            XmlSerializer xmlFormater = new XmlSerializer(typeof(ObservableCollection<MyClass>[]));
            using (var file = new FileStream("AllCollections.xml", FileMode.OpenOrCreate))
            {
                xmlFormater.Serialize(file, AllCollections);
            }
 
        }
    }
}
Добавлено через 3 минуты
Попробовал сериализовать в json - всё работает. А вот в xml не хочет..

Добавлено через 2 часа 27 минут
Вопрос разрешился сменой сериализатора: заменил XmlSerializer на DataContractSerializer. Всё нормально сериализуется и десериализуется. Похоже (но могу ошибаться) что XmlSerializer просто не поддерживает такие сложные структуры..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.10.2019, 07:48
Помогаю со студенческими работами здесь

Бинарная сериализация ObservableCollection и передача через сеть
Всем привет. есть маленькая проблем ка. есть класс Код C# public class PLayer { public String Name{get;set;} public TimeSpan...

Бинарная сериализация ObservableCollection и передача через TcpClient
Всем привет. есть маленькая проблем ка. есть класс public class PLayer { public String Name{get;set;} public TimeSpan Tax { get;...

Xml сериализация многострочных строк, отступы в xml файле
У меня есть класс который сериализуется в xml и содержит многострочную строку. class SerializableClassWithMultilineString { public...

Сделать XML сериализацию, которая будет сериализовать несколько коллекций
Доброй ночи. Мне нужно сделать xml сериализацию, которая будет сериализовать несколько коллекций. Я так почитал, что Xml сериализация...

Сериализация в XML
Помогите пожалуйста! У меня есть калькулятор, а его вычисления надо сериализовать в XML. Как это сделать? using System; using...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru