所有的荣耀如何存储一个对象到磁盘?
我的对象派生自TObjectList,因此它拥有其他对象.
我的对象派生自TObjectList,因此它拥有其他对象.
哪个是最快最简单的方法?哪个是兼容的方式?
序列化不是一个解决方案,因为我想保存非公共属性和它所拥有的对象列表!
目前我试图将每个对象独立地保存为一个二进制文件,然后将它们打包在一起.这是一个漫长的过程,但允许我使用较新版本的程序加载对象的旧版本(与以前保存的项目兼容).无论如何,复杂性开始增长,而且看起来还不错.
解决方法
我也主要使用手工序列化为我自己的数据结构.多版本角度是主要原因之一.
但是,在您的情况下,这很困难,因为并非所有对象(tobjectlist)都是从包含虚拟抽象方法加载/存储的自己的层次结构中派生出来的.
D2010序列化(其中几乎允许RTTI)可能是一个解决方案,但可能需要一个新的delphi版本,更糟糕的是,它结束了手动处理版本控制. (例如,当格式更改时,将旧字段的值复制为新的字段)
如果手动流式传输不方便,则可能会有不同的方法来为对象的数据部分提供抽象定义,并从这些抽象定义生成源代码(字段声明和流代码).优点在于,您可能需要在这里和那里的某些自定义代码中滑动,或者将您的生成器修补为版本控制问题.
我做了一次这样一个业务对象与sql映射与超过800个对象.既然是Delphi之前泛型的时候,我也为每个对象以及其他帮助器和转换器对象/例程生成了类型安全的容器类型.
这是很多工作,虽然设置,只有值得,如果你有一个项目,真的有很多的对象和领域(数百,如果不是数千),并确保你需要维护它与重大突变相当一些时间到了