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

Сериализация/десериализация списка

13.11.2022, 13:04. Показов 1481. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу метод, который десериализует список из json-файла, добавляет в него элемент и сериализует список обратно в файл
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        public virtual void SaveToFile(string Filename)
        {
            List<Record> lst = new List<Record>();
            if (File.Exists(Filename))
            {
                using (FileStream fs = new FileStream(Filename, FileMode.Open, FileAccess.Read))
                {
                    lst = JsonSerializer.Deserialize<List<Record>>(fs);
                }
            }
            using (FileStream fs = new FileStream(Filename, FileMode.OpenOrCreate, FileAccess.Write))
            {
                lst.Add(this);
                JsonSerializerOptions options = new JsonSerializerOptions
                {
                    Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
                    WriteIndented = true
                };
                JsonSerializer.Serialize<List<Record>>(fs, lst, options);
            }
        }
Проблема в том, что нормально записывается только последний объект, а поля предыдущих объектов записываются пустыми. Почему так происходит?:
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.11.2022, 13:04
Ответы с готовыми решениями:

Сериализация/Десериализация списка объектов в XML
имеется базовый класс Figure using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Сериализация и десериализация
Доброго вечера. Возникло странное непонимание принципов сериализации. Дело в том, что я не встречал достаточно подробных материалов по...

Сериализация / десериализация
доброе время суток=) такое задание - отправить объект класса с приложения клиента на сервер это код который сериализует на...

23
2 / 2 / 0
Регистрация: 11.01.2013
Сообщений: 260
14.11.2022, 15:03  [ТС]
Студворк — интернет-сервис помощи студентам
Andreyip, можно пример?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
14.11.2022, 16:02
Цитата Сообщение от hawk1 Посмотреть сообщение
можно пример?
Как использовать неизменяемые типы и частные методы доступа с помощью System.Text.Json
0
2 / 2 / 0
Регистрация: 11.01.2013
Сообщений: 260
14.11.2022, 16:30  [ТС]
Помогло вот такое решение
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
  /// <summary>
    /// Базовый абстрактный класс, описывающий запись в списке дел
    /// </summary>
    public abstract class Record
    {
        protected DateTime date;
        
        /// <summary>
        /// Дата записи
        /// </summary>
        public DateTime Date
        {
            get => date;
            set
            {
                date = value;
            }
        }
 
        /// <summary>
        /// Конструктор по умолчанию
        /// </summary>
        public Record()
        {
            Date = DateTime.MinValue;
        }
 
        /// <summary>
        /// Конструктор с параметрами
        /// </summary>
        /// <param name="date">Дата записи</param>
        public Record(DateTime date)
        {
            Date = date;
        }
 
        /// <summary>
        /// Выполняет сериализацию и сохранение записи в файл
        /// </summary>
        /// <param name="Filename">Имя файла</param>
        public virtual void SaveToFile(string Filename)
        {
            List<Record> lst = new List<Record>();
            if (File.Exists(Filename))
            {
                using (FileStream fs = new FileStream(Filename, FileMode.Open, FileAccess.Read))
                {
                    lst = JsonSerializer.Deserialize<List<Record>>(fs);
                }
            }
            using (FileStream fs = new FileStream(Filename, FileMode.Create, FileAccess.Write))
            {
                lst.Add(this);
                JsonSerializerOptions options = new JsonSerializerOptions
                {
                    Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
                    WriteIndented = true
                };
                JsonSerializer.Serialize<List<Record>>(fs, lst, options);
            }
        }
    }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,171
Записей в блоге: 2
14.11.2022, 17:33
Цитата Сообщение от hawk1 Посмотреть сообщение
Помогло вот такое решение
А почему не просто:
C#
11
      public DateTime Date {get; set;}
Никакого смысла в поле protected DateTime date я не вижу.

Добавлено через 2 минуты
hawk1, и для нормальной реализации SaveToFile нужно прописать конвертеры и контракты сериализации, чтобы в производных типах не переопределять этот метод.

Так же гораздо логичнее будет сделать этот метод статическим.

Добавлено через 1 минуту
hawk1, и у меня всё больше и больше складывается впечатление, что в вашем Решении большие проблемы с общей архитектурой Приложения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.11.2022, 17:33

Protobuf сериализация десериализация
Добрый день уважаемые форумчане. Помогите разобраться. Имеется клиент серверное приложение. Как мне при помощи protobuff-net настроить...

Сериализация и десериализация XML
Всем привет, есть проблема с десериализцией объектов. Имеем два класса Класс Product using System; using...

Помогите плз по C#, сериализация десериализация
В одной программе сохраняю объект: saveFileDialog.Title = &quot;Сохранение теста&quot;; saveFileDialog.Filter = &quot;Файлы тестов|*.ftd|Все...

Сериализация и десериализация в Json нескольких разных классов
Добрый день. Стоит такая задача. Есть приложение которое сериализует данные, есть второе приложение которое эти данные десериализует. К...

Бинарная сериализация/десериализация класса для передачи по сети. Exception: "Object must implement IConvertible."
Здравствуйте! Пишу клиент &lt;-&gt; сервер (Xamarin &lt;-&gt; WinForms) передачу данных организую с помощь бинарной сериализации/десериализации ...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru