如何将对象存储到磁盘?

WeG*_*ars 14 delphi

如何将对象存储到磁盘中的所有荣耀?我的对象派生自TObjectList,因此它包含其他对象.

哪种方式最快最简单?哪种兼容方式?

序列化不是解决方案,因为我想保存非公共属性及其拥有的对象列表!

目前我试图将每个对象独立地保存为二进制文件,然后打包在一起.这是一个漫长的过程,但允许我使用较新版本的程序加载旧版本的对象(与以前保存的项目兼容).无论如何,复杂性开始增长,并且它看起来不再好看了.

Mar*_*ort 2

我也主要对我自己的数据结构使用手工序列化。多版本角度是主要原因之一。

然而,在您的情况下,这很困难,因为并非所有对象(tobjectlist)都派生自包含要加载/存储的虚拟抽象方法的自己的层次结构。

D2010 序列化(据我所知几乎允许 RTTI 的所有内容)可能是一个解决方案,但可能需要新的 delphi 版本,更糟糕的是,它意味着手动处理版本控制的结束。(例如,当格式更改时将旧字段中的值复制到新字段中)

如果手动流式传输失去控制,则另一种方法可能是为对象的数据部分提供抽象定义,并从这些抽象定义生成源代码(字段声明和流式传输代码)。优点是,您可以在需要时在这里或那里插入一些自定义代码,或者修补生成器以解决版本控制问题。

我曾经为一个包含 800 多个对象的业务对象到 SQL 映射执行过此操作。因为当时 Delphi 中还没有泛型,所以我也为每个对象生成了一个类型安全的容器类型,以及其他帮助器和转换器对象/例程。

不过,设置工作量很大,只有当您的项目包含大量对象和字段(数百甚至数千)并且确信您需要在相当长的时间内通过重大突变来维护它时,才值得这样做。时间到了。