Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top