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

===============>>#1 票数:3 已采纳

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

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

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

===============>>#2 票数:0

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

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

===============>>#3 票数:0

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

  ask by Peter translate from so

未解决问题?本站智能推荐:

1回复

TPopupMenu作为子组件,序列化TMenuItems

我试图将TPopupMenu作为子组件包含在自定义组件中,如下所示: 问题是TMenuItems没有保存到DFM。 覆盖GetChildren使项目保存,但加载不起作用。 设置SetSubComponent(True)无效,TMenuItems不保存到DFM。 UPD:
1回复

如何在Arrays的自定义类对象中使用DefineProperties - Delphi

我正在尝试创建自己的类对象并使用它来存储我的应用程序的各种数据类型,这一切都可以正常使用已发布的属性,我可以将这些流传输到磁盘并返回没有问题。 但我需要流式传输一些整数和字符串数据类型的数组。 据我所知,Arrays,以及其他数据类型无法发布属性,因为Delphi不知道如何流式传输它们,
2回复

Delphi 7 remobjects - 序列化组件

我有一个用Delphi 7和RemObjects SDK构建的客户端 - 服务器应用程序。 客户端和服务器之间的消息是二进制文件( http://wiki.remobjects.com/wiki/BinMessage )。 我的问题是:1)如果我用数据填充TDataSet / TDataSo
1回复

基于组件的游戏引擎中的序列化

我正在基于组件的游戏引擎中实现序列化,以便在游戏中进行保存和加载。 我正在使用Cereal来帮助我进行序列化。 但是,我不清楚两件事: 我有很多组件,这些组件也包含类等。是否需要为所有组件编写序列化函数? 那意味着我必须写大约100个序列化函数。 它们中的大多数将是相同的(只需
4回复

Delphi(win32)序列化库

是否有任何Delphi序列化库能够序列化记录和记录数组而不是类?
3回复

二进制序列化文件-Delphi

我正在尝试反序列化在Delphi中序列化的旧文件格式,它使用二进制序列化。 除了其中的一些非常高级的记录外,我对文件的结构一无所知。 您将采取什么步骤解决此问题? 有其他工具吗?
1回复

在Delphi中反序列化数组

Delphi中有没有PHP中的“ unserialize()”之类的函数? 我拥有的数组是这样的字符串格式: a:6:{s:15:“ info_buyRequest”; a:2:{s:3:“数量”; i:1; s:1 5:“ super_attribute”; a:2:{i:23
1回复

Delphi词典保存/加载。 TDictionary无法序列化?

TDictionary : SaveToFile / LoadFromFile 多么优雅的解决方案! 首先,一切都按预期运行。 内容以看起来正确的JSON格式保存到文件中。 但是在重新加载文件后,出现了一个问题: 测试如下。 所有的荣耀结束了。 这是代码,包括注释:
3回复

是否有支持泛型的Delphi对象序列化库?

我所知道的所有开源对象序列化库(JvAppStorage,NativeXml,OmniXML,SuperObject,lkJSON)似乎都不支持Generics属性。 (如果我错了,请纠正我)。 你知道有这个功能或计划添加它的图书馆吗? 如何在Delphi 2010中使用JSON序列化
3回复

使用不可序列化的对象序列化哈希图

在JavaFX组件的情况下,如何序列化包含不可序列化对象的哈希图? 抛出: java.io.NotSerializableException:javafx.scene.control.Button