Сериализация компонентов Delphi

Кто-нибудь сталкивается с проблемами, которые сериализуют компоненты в файл и считывают их обратно, особенно в том месте, где поставщик компонента обновляет компоненты VCL. Например, файл, сериализованный с помощью DelphiX, а затем несколько лет спустя, прочитайте с delphiY. Измените формат сериализации и если да, то что можно сделать, чтобы предотвратить ошибки чтения в компонентах при обновлении.

3 ответа

Встроенная система RTTI для сериализации опубликованных свойств уязвима для изменений компонентов. Переход вперед управляется, пока старые свойства хранятся в новых объектах. То есть вы оставляете интерфейс свойств как есть, но можете отбросить содержимое, если хотите. Возвращение назад хуже - поскольку более новая версия с сохраненной версией не может быть открыта при загрузке более старой версии, и это будет проблемой.

Существуют компоненты /libs (http://www.torry.net/quicksearchd.php?String=RTTI&Title=Yes), которые могут добавлять сериализацию в формате XML, и это может немного помочь, поскольку вы можете выбрать для пропуска содержимого, которое вы не знаете.

Вам все равно нужно помнить о том, как вы разрабатываете свой опубликованный контент и, вероятно, найдете способ "игнорировать, но распространять" контент, который ваша текущая версия не понимает. Это позволит вам открывать и изменять файл в более новом формате, пытаясь сохранить новые атрибуты, а не удалять их.


Спасибо за ответ. Я пытался избежать пользовательской сериализации и использовать преимущества каждого метода сериализации компонентов, но с отсутствием opf каким-либо образом "исправлять" обновление до нового формата компонента. Я предполагаю, что обычная сериализация - единственный метод.


Форматы будут изменяться, поскольку поставщики добавят функции к своим компонентам. Сериализация просто перебирает все опубликованные свойства и сохраняет их в потоке. Когда они будут считаны, каждый из свойств, которые считываются из потока, будет возвращен к компоненту. Если свойство больше не существует, у вас есть проблема. Я не думаю, что вы можете что-то сделать с этим, кроме некоторых основных обработок исключений.

Лучший способ гарантировать совместимость - это сделать свою собственную сериализацию.

licensed under cc by-sa 3.0 with attribution.