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

有帮助吗?

解决方案

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

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

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

其他提示

随着供应商为其组件添加功能,格式肯定会发生变化。序列化只是循环遍历所有已发布的属性并将它们保存到流中。当它们被读回时,从流中读取的每个属性都将被设置回组件。如果该财产不再存在,那么您就会遇到问题。我认为除了一些基本的异常处理之外,您对此无能为力。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top