德尔福组件序列化

是否有人遇到过将组件序列化到文件中并将其读取回来的问题,特别是在组件供应商升级VCL组件的领域。例如,一个用DelphiX序列化的文件,几年后用delphiY读取回来。序列化格式是否更改,如果更改,可以做些什么来防止升级时读取组件中的错误。

请先 登录 后评论

3 个回答

Birger

格式肯定会改变,因为供应商会向他们的组件添加特性。序列化简单地遍历所有已发布的属性并将它们保存到一个流中。当它们被读回时,从流中读取的每个属性都将被设置回组件。如果该属性不再存在,那么就有问题了。除了一些基本的异常处理之外,我不认为你能做什么。

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

请先 登录 后评论
Peter

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

请先 登录 后评论
Lars Fosdal

用于序列化已发布属性的内置的基于RTTI的系统很容易受到组件更改的影响。只要旧的属性保存在新对象中,就可以管理继续向前。也就是说,你保持属性界面不变,但如果你愿意,你可以丢弃其中的内容。往回走会更糟——因为新版本保存的属性不能在旧版本加载中打开,这将是一个问题。

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

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

请先 登录 后评论