有没有人遇到过问题,将组件序列化成文件并读回来,特别是在组件供应商升级VCL组件的区域。例如一个用DelphiX序列化的文件,然后几年后用delphiY回读。序列化格式是否改变,如果有的话,可以做些什么来防止升级时组件中的错误读取。Delphi组件序列化
回答
用于序列化已发布属性的内置RTTI系统易受组件更改影响。只要旧物业保存在新物品中,前行就可以管理。即你可以按照原样离开财产界面,但如果你愿意的话,可以抛弃内容。向后退却更糟糕 - 由于新版本保存的属性无法在旧版本加载中打开,这将是一个问题。
有些组件/库(http://www.torry.net/quicksearchd.php?String=RTTI&Title=Yes)可以添加XML格式的序列化,这可能会有所帮助,因为您可以选择跳过您不知道的内容。
您仍需要注意您是如何设计发布的内容,并且应该找到一种方法来“忽略但传播”您当前版本无法理解的内容。这将允许您在尝试保留较新的属性时打开并更改较新格式的文件,而不是将其剥离。
由于供应商会向其组件添加功能,因此格式将明确更改。序列化只是遍历所有已发布的属性并将它们保存到流中。当它们被读回时,从流中读取的每个属性都将被设置回组件。如果该物业不存在了,你有问题。除了一些基本的异常处理外,我不认为你可以做任何事情。
保证兼容性的最佳方法是自己做系列化。
感谢您的回复。我试图避免自定义序列化,并利用每个组件的序列化技术,但缺乏opf的任何方式来“升级”到一个新的组件格式我想自定义序列化是唯一的方法。
只要您仍然阅读支持旧的和过时的参数,就可以使新版本能够读取旧的流。问题在于让旧发行版读取新的流,而这些新流是没有定制序列化的情况下无法完成的。 – 2008-09-17 06:46:45
- 1. Delphi 7 remobjects - 序列化组件
- 2. 组件未被序列化
- 3. Java swing组件序列化
- 4. 序列化WPF组件
- 5. Delphi DeHL反序列化新文件夹中的XML文件?
- 6. 带有Canvas的Delphi可视化组件
- 7. 序列化/反序列化PHP数组
- 8. Node.js:如何序列化/反序列化React组件?
- 9. VCL组件Delphi
- 10. 序列化数组
- 11. 序列化/反序列化int数组以字符数组
- 12. 序列化秋千/ AWT组件
- 13. delphi组件顺序和图层选项
- 14. 的程序化用Delphi
- 15. Delphi组件像trichview
- 16. ORM与序列化数组?
- 17. 反序列化数组
- 18. 序列化组合对象
- 19. 序列化对象数组
- 20. 如何序列化数组?
- 21. 多维数组序列化
- 22. 序列化javascript数组
- 23. 编组和序列化
- 24. 序列化元组到JSON
- 25. 序列化包含数组
- 26. 事件序列化
- 27. Delphi报表组件和最终用户的可视化控件
- 28. XML序列化初始化为数组
- 29. 如何序列化数组并反序列化返回
- 30. 序列化/反序列化的字节数组中JSON.NET
当您直接使用Classes.TReader并为OnError事件编写处理程序时,使用VCL-Streaming可以处理缺少的属性(以及缺失的类和其他错误)。你找到了Classes单元中需要的所有代码。 最大的缺点是您的类/类必须从TComponent派生或至少从TPersistent派生。 – 2010-03-16 09:48:46