Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 28.04.2023
Сообщений: 5

BinaryFormatter Десериализация данных в разных версиях приложения

02.05.2023, 07:41. Показов 487. Ответов 2

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Хочу спросить совета. Я использую бинарный сериализатор для сохранения данных в приложение. Типы данных в основном коллекции состоящие из int, string.

Я сохраняю все это в статичном классе (в один файл) и позже если файл существует то сразу после старта сцены он будет загружен и выполнен. Ниже приведу пример кода

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public static class Data{
 
public List<int> avatarID; // данные которые были в первой версии приложения 
 
public List<int> testData; // данные которые я добавил в обновление (этой строчки получается нет в первой версии приложения, и не будет даже если пользователь обновился все равно в файле сохранения ее нет)
 
public static start () // загружаю данные сразу после запуска приложения для того чтобы сразу начать работу с новыми данными в коллекции
{
BinaryFormatter formater = new BinaryFormater(); 
FileStream file = new FileStream("путь",FileMode.Open);
avatarID=Data.Desirialze(file,avatarID); // будет успешно загружен 
testData=Data.Desirialize(file,testData); // получу ошибку что обнаружен конец потока 
}
Вопрос возможно ли как то проверить существует ли эта строчка в файле перед тем как пытаться что либо прочитать и если нет то записать ее в файл и снова попытаться прочитать Я пытался нагуглить данное решение но ничего кроме воды о том как выполнить простейшию сериализацию не нашел. Самостоятельно полистав методы BinaryFormater я не обнаружил какие либо очевидные для этого методы.

Мне кажется очевидным решением - все новые данные(которых нет в предыдущей версии приложения) выносить в отдельный void() и выполнять его запись в файл а после запускать Start() Я понимаю что этих проблем возможно бы не было если бы я реализовал сохранения через интерфейсы или еще каким-нибудь наверно более правильным и гибким способом но я пока что не сильно разбираюсь в этом
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.05.2023, 07:41
Ответы с готовыми решениями:

Различное отображение WinForm приложения на разных версиях Windows
Здравствуйте, уважаемые программисты(коллеги). У меня тут появилась пробемка с окнами на разных виндаках, тоесть xp совершенно по другому...

Проблема при отображении иконки приложения на разных версиях андроида
Я использую иконку своего приложения на странице About. Так вот, на телефоне с 6-м андроидом отображается правильно, а на телефоне с 11-м...

Десериализация BinaryFormatter. Key всегда равен null. Как считать ключ
BinaryFormatter binaryFormatter = new BinaryFormatter(); FileStream fileStream = new FileStream(LogicForm.path, FileMode.Create,...

2
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
02.05.2023, 18:33
Лучший ответ Сообщение было отмечено js23456 как решение

Решение

Попробуй это https://docs.unity3d.com/Scrip... write.html
У него есть особенность, он перезапишет только те поля в классе, о которых знает (те что содержатся в json строке), если в классе появится новое поле или какое-то поле будет удалено, то он не выдаст исключения, просто сделает вид что не заметил
Но минус в том что это фича от юнити, а она довольно убогая и не поддерживает сложные типы в стиле List<int[]>, словари и тд.
1
0 / 0 / 0
Регистрация: 28.04.2023
Сообщений: 5
03.05.2023, 10:19  [ТС]
Спасибо! Попробую) Может получится конкретно под то приложение над которым я работаю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.05.2023, 10:19
Помогаю со студенческими работами здесь

IE отображение в разных версиях
Работаю с IE (необходима совместимость). Дело такое - использую bootstrap-datepicker. Решил тут посмотреть режим разработчика в ИЕ. У меня...

Потеря данных при десериализции (BinaryFormatter)
Имеются три класса: сезон, раунд, матч. Все состоят в отношении агрегация. В раунде 8 матчей, в сезоне 30 раундов. При сериализации...

Delay в разных версиях Паскаль.
Почему задержка в различных версиях языка ТурбоПаскаль работает не одинаково?? Написал программу,и перед запуском программы идет что-то...

S-function в разных версиях Matlab
Есть одна модель, написанная не мной, в которой присутствует блок s-func, на матлаб 2011 она запускается и работает(как утверждает автор...

Подключение библиотек в разных версиях VS
Недавно установил VS2010, до этого писал на VS2013, но там возникало много проблем из-за несовместимости библиотек. Переписал полностью...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
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, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru