Delphi组件序列化

时间:2020-03-05 18:56:23  来源:igfitidea点击:

有没有人遇到将组件序列化到文件并读回它们的问题,特别是在组件供应商升级VCL组件的区域。例如,一个文件用DelphiX序列化,然后在几年后用delphiY读回。序列化格式是否发生更改?如果更改,可以采取哪些措施来防止升级时读取组件中的错误。

解决方案

回答

格式将彻底改变,因为供应商将在其组件中添加功能。序列化只是循环所有已发布的属性,并将它们保存到流中。读回它们时,将从流中读取的每个属性都重新设置为组件。如果该属性不再存在,则我们有问题。我认为除了一些基本的异常处理之外,我们不能对此做任何事情。

保证兼容性的最佳方法是进行自己的序列化。

回答

谢谢回复。我试图避免自定义序列化并利用每个组件的序列化技术,但是由于缺少opf来"修补"升级到新的组件格式的任何方法,我猜想自定义序列化是唯一的方法。

回答

用于序列化已发布属性的基于RTTI的内置系统很容易受到组件更改的影响。只要将旧属性保留在新对象中,前进就可以管理。 IE。我们可以按原样保留属性界面,但可以根据需要扔掉内容。向后退一步会更糟,因为无法在旧版本的加载中打开保存的新版本的属性,这将是一个问题。

有一些组件/库(http://www.torry.net/quicksearchd.php?String=RTTI&Title=Yes)可以添加XML格式的序列化,这可能会有所帮助,因为我们可以选择跳过不需要的内容知道。

我们仍然需要注意如何设计已发布的内容,并且可能应该找到一种方法来"忽略但传播"当前版本不了解的内容。这样,我们就可以尝试以较新的格式打开和更改文件,同时尝试保留较新的属性,而不是剥离它们。