|
34 / 21 / 2
Регистрация: 31.03.2009
Сообщений: 362
|
|||||||||||
Ошибка сериализации19.10.2009, 18:45. Показов 4138. Ответов 7
Метки нет (Все метки)
есть класс, в котором 2 массива List<string>, есть listView, я добавляю в него эл-ты и одновременно добавляют элементы в массив того класса, затем сериализую и сохраняю, но при загрузке получается так что массивы имеют значение null
код класса:
0
|
|||||||||||
| 19.10.2009, 18:45 | |
|
Ответы с готовыми решениями:
7
Ошибка сериализации
Ошибка при сериализации |
|
84 / 83 / 6
Регистрация: 13.07.2009
Сообщений: 107
|
|||||||||||
| 20.10.2009, 00:14 | |||||||||||
|
LordXaosa, для начала хочу сделать несколько замечаний.
1) List<T> - это НЕ массив, это динамический generic список. Его можно проиндексировать как массив, но называть его массивом не правильно! 2) Раз ты добавляешь элементы попарно, то у тебя, получается, лучшим способом хранения будет класс Dictionary<TKey, TValue>. Но если предположить, что позднее может добавится еще одно или более полей, то лучше вынести все поля в один отдельный класс, а уж потом его экземпляр добавлять в список List<T>. 3) Если для списка объектов предусматриваются дополнительные действия кроме стандартных, например сохранение и восстановление, то лучше выносить этот список в отдельный класс обертку вокруг стандартного контейнера. Таким образом это получится независимый объект, который знает что содержит и имеет все методы, неообходимые для обработки своих данных. Такой объект должен защищать свои данные от внешнего вмешательства и позволять делать с ними только то, что предусмотрел разработчик. 4) Я так и не понял зачем при каждом добавление пары значений, ты очишаешь содержимое визуального ListView объекта и перезаполняешь его всеми значениями заново. Я мало работал с WinForms приложениями, что бы привести код близкий к идеальному, но я бы решил твою задачу приблизительно так:
1
|
|||||||||||
|
34 / 21 / 2
Регистрация: 31.03.2009
Сообщений: 362
|
|
| 20.10.2009, 00:27 [ТС] | |
а конкретно для моего варианта поправки нету? ^_^" я попробую твой вариант, но просто на моей стадии это оч сложно) просто я однажды делал сериализацию с классом содержащий списки, все сделал так же, однако читать нехочет правильно... вернее не читает вобще... сохранять сохраняет, проверил...
0
|
|
|
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
|
|
| 20.10.2009, 07:42 | |
|
Попробуйте переделать поля в свойства.
Также заменить FileMode.Append на режим создания файла.
1
|
|
|
84 / 83 / 6
Регистрация: 13.07.2009
Сообщений: 107
|
|
| 20.10.2009, 11:38 | |
|
Я еще вчера хотел написать на счет замены FileMode.Append на FileMode.Create, у меня и в примере так, но было уже поздно, спешил успеть выложить готовый проект, вот и забыл.
Сложно сказать, почему еще могли возникнуть проблемы с десериализацией. В C# это в большинстве случаев автоматический процесс требующий всего несколько строк кода и с которым у меня никогда не возникало проблнем :-\. На крайний случай можешь выложить свой проект - я под отладкой посмотрю, что не так.
1
|
|
|
34 / 21 / 2
Регистрация: 31.03.2009
Сообщений: 362
|
|
| 20.10.2009, 11:58 [ТС] | |
|
да действительно, надо было заменить с Append на Create... тото я смотрел что файл после некоторых сохранений огромным становился)
0
|
|
|
34 / 21 / 2
Регистрация: 31.03.2009
Сообщений: 362
|
|
| 20.10.2009, 16:20 [ТС] | |
|
а не подскажете, как можно класс сначало закриптовать а потом сирелизовать? просто при сериализации можно прочесть строки к примеру, а надо что бы они были криптованы, как такое можно сделать? есть вариант записывать в класс уже криптованые, тоесть при вводе криптовать, забивать в список... потом при десериализации их раскриптовывать... но както это геморно... есть чтото проще?
Добавлено через 25 минут прошу прощения, разобрался уже, методом CryptoStream решил задачу, вот ссылка на решение: http://stackoverflow.com/quest... m-a-stream Добавлено через 13 минут и все же как выяснилось этот метод не подходит... даже если установить статичный ключ(всмысле что он не меняется при перезапуске) выдается ошибка десериализации, то что не найден объекв верхнего уровня... есть варианты исправить это или придеться криптовать строки?
0
|
|
|
84 / 83 / 6
Регистрация: 13.07.2009
Сообщений: 107
|
||||||||||||||||
| 20.10.2009, 18:22 | ||||||||||||||||
|
LordXaosa, C# позволяет управлять процессом сериализации/десериализации.
Например, класс содержит вычисляемые поля и в целях экономии места нету смысла эти поля так же сохранять в файл - эти поля можно пометить атрибутом игнорирования (у каждого форматера свой, у BinaryFormatter - [NonSerialized]). А при восстановлении эти поля можно просто вычислить единожды для каждого экземпляра снова. Для такой задачи достаточно унаследовать классом интерфейс IDeserializationCallback и определить его функцию
.Для задач, когда нужно перед записью в файл изменить значения некоторых значений (например зашифровать), существует другой интерфейс - ISerializable и две его функции:
Вообще-то тут можно много говорить по поводу способов управления процессом сериализации/десериализации, но зачем повторять то, что давно уже написано ? Можно покопать по этому поводу MSDN или вот [] книгу, раздел 5, глава 3 (а можно и первые 2 тоже ). Я изучал эту тему именно по этой книге.С классом CryptoStream не сталкивался, ничего подсказать не могу. Может завтра поковыряюсь с ним.
1
|
||||||||||||||||
| 20.10.2009, 18:22 | |
|
Помогаю со студенческими работами здесь
8
Ошибка при сериализации Ошибка при сериализации от клиента серверу Ошибка при сериализации класса AL7_Class_ExtFileInfo Ошибка InvalidOperationException при Xml сериализации Возникла ошибка при отражении типа во время XML сериализации Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|