【发布时间】:2010-09-09 14:07:52
【问题描述】:
是否有人遇到过将组件序列化到文件中并将它们读回的问题,特别是在组件供应商升级 VCL 组件的领域。例如,一个文件用 DelphiX 序列化,然后几年后用 delphiY 读回。序列化格式是否发生变化,如果发生变化,可以采取哪些措施来防止升级时读取组件时出错。
【问题讨论】:
标签: delphi serialization components
是否有人遇到过将组件序列化到文件中并将它们读回的问题,特别是在组件供应商升级 VCL 组件的领域。例如,一个文件用 DelphiX 序列化,然后几年后用 delphiY 读回。序列化格式是否发生变化,如果发生变化,可以采取哪些措施来防止升级时读取组件时出错。
【问题讨论】:
标签: delphi serialization components
用于序列化已发布属性的内置 RTTI 系统容易受到组件更改的影响。只要将旧属性保留在新对象中,就可以管理前进。 IE。您可以保留属性界面,但如果您愿意,可以丢弃内容。倒退更糟 - 因为新版本保存的属性无法在旧版本加载中打开,这将是一个问题。
有一些组件/库 (http://www.torry.net/quicksearchd.php?String=RTTI&Title=Yes) 可以添加 XML 格式的序列化,这可能会有所帮助,因为您可以选择跳过您不知道的内容。
您仍然需要注意如何设计已发布的内容,并且可能应该找到一种方法来“忽略但传播”您当前版本不理解的内容。这将允许您以较新的格式打开和更改文件,同时尝试保留较新的属性,而不是剥离它们。
【讨论】:
格式肯定会发生变化,因为供应商将为其组件添加功能。序列化只是循环所有已发布的属性并将它们保存到流中。当它们被读回时,从流中读取的每个属性都将被设置回组件。如果该属性不再存在,那么您就有问题了。除了一些基本的异常处理之外,我认为您对此无能为力。
保证兼容性的最佳方式是进行自己的序列化。
【讨论】:
感谢您的回复。我试图避免自定义序列化并利用每个组件序列化技术,但是由于缺少任何方法来“修补”升级到新组件格式,我猜自定义序列化是唯一的方法。
【讨论】: