Я пытаюсь обернуть голову вокруг сериализации. Но что произойдет, если по каким-то причинам мне нужно добавить или удалить некоторые значения или свойства? Как это повлияет на содержание? Или это не проблема? Или как я могу избежать этого?Сериализация: Будет ли изменение базового класса проблемой?
ответ
Как уже отмечалось, это зависит от вашего сериализатора. XmlSerializer
в этом случае несколько проще:
- Сериализатор работает против открытого интерфейса, поэтому, если вы измените реализацию, ничего не получится.
- XML читается человеком и поэтому легко разбирается вручную или с помощью некоторых утилит XML. Поэтому вы можете написать конвертер версии, если все остальное пойдет не так.
Рассмотрите аннексию Джона для получения дополнительных советов, особенно с NonSerialized
и OptionalField
атрибутами.
Все зависит от того, какой метод сериализации вы используете, и если вы планируете десериализацию устаревших объектов.
Я считаю, что может столкнуться с некоторыми проблемами, если вы добавляете или удаляете свойства и все еще хотите десериализовать более старые версии ваших объектов, в зависимости от того, какой тип сериализации вы делаете.
Для BinaryFormatter и SoapFormatter:
- При добавлении новых свойств, вам нужно будет украсить их с OptionalField Attribute, так что вы все еще можете десериализации старые версии вашего объекта, которые не имеют новое поле.
- Если вы «удаляете» свойства, вам придется оставить их в коде, но украсить их OptionalField Attribute, чтобы вы все еще могли десериализовать более старые версии вашего объекта, у которых все еще есть удаленное поле.
Я могу говорить для XmlSerializer, так как он широко используется в моем собственном проекте.
Добавление свойств не вызывает никаких проблем с XmlSerializer, недостающие свойства из сериализованного xml просто сохраняют значение по умолчанию. Эффект удаления или переименования существующих свойств - это просто потеря данных. Если вы не имеете дело с исходным xml AS xml или текстовым файлом, данные в удаленных или переименованных свойствах просто теряются. Для добавления, удаления или переименования свойств при использовании XmlSerializer специальных атрибутов не требуется.
- 1. Пользовательский Сериализация свойств базового класса
- 2. Xml-сериализация Атрибуты базового класса
- 3. Изменение базового класса окна
- 4. Джерси/Джексон Сериализация базового класса выдавать только
- 5. Protobuff.NET - различная сериализация абстрактного базового класса
- 6. питон: изменение атрибутов базового класса
- 7. Изменение базового класса класса с помощью __new__
- 8. XML-сериализация базового класса без знания производного класса
- 9. , когда указатель базового класса указывает на объект базового класса, будет ли компилятор использовать динамическое связывание?
- 10. Qt Designer: изменение базового класса окна
- 11. изменение базового класса через «данные, определенные оверлеями»
- 12. Изменение значения базового класса в C++
- 13. Изменение значений производных классов из базового класса
- 14. Будет ли публичная папка загрузки проблемой безопасности?
- 15. Будет ли эта кодировка проблемой в будущем?
- 16. Изменение значения поля базового класса из производного
- 17. JSON/XML-сериализация: игнорировать/включать некоторые поля из базового класса
- 18. изменение базового класса от cdialog до cdialogex
- 19. Сериализация класса POCO, полученного из базового слоя с помощью DataContract?
- 20. Сериализация базового класса, который не имеет аннотаций jaxb
- 21. Сериализация класса внутри класса
- 22. Наследование XMLType базового класса
- 23. Является ли множественное наследование от того же базового класса через разные родительские классы действительно проблемой?
- 24. Будет ли сериализация сохранять поля суперкласса?
- 25. Сериализация ссылочного класса Объект
- 26. проблема с проблемой статического класса
- 27. Сериализация и восстановление неизвестного класса
- 28. Изменение базового каталога
- 29. Может ли изменение базового URL в Swagger?
- 30. Будет ли вызов метода базового класса перенаправлен на переопределенные методы производного класса?
Это зависит от того, какой механизм сериализации вы используете. BinaryFormatter? XmlSerializer? Json.NET? Это умеренно сложная тема. –
О, извините. Я использовал XmlSerializer для обучения, а затем планировал переход на BinaryFormatter для хранения SQL. Это сложнее, чем я думал, я так понимаю? –
Я настоятельно рекомендую вам ** не ** переходить в BinaryFormatter для хранения SQL - это не (IMO), хорошо подходящее для хранения в течение любой продолжительности. Я смиренно представляю protobuf-net, возможно, лучший выбор (я автор, он бесплатный и т. Д., И разработан специально, чтобы избежать многих проблем в BinaryFormatter) –