0

我对 Ocean serialization 不是很“流利”。我可以将整个 Petrel 属性(属性、网格或任何其他 Petrel/Ocean 的对象)序列化到我的自定义数据源中吗?我能把它加载回来吗?有什么好的做法/模式可以做到这一点吗?欢迎提供一些代码示例!

4

1 回答 1

3

您是否已经建立了数据源?DataSource 使用的持久性后端(SQL?XML?)决定了数据的存储方式。您希望通过 DataSource 保留的任何数据都必须转换为后端的格式。

请注意,数据源没有“海洋序列化”之类的东西 - 您(并且只有您)完全控制数据源。通常,您实际上是将其作为服务提供给 Ocean,因此,给定一个 Droid,它可以解析您的一个对象(例如自定义域对象、工作步骤参数包或地震属性参数包)。

现在,根据您的问题,听起来您正在寻求存储您提到的 Petrel 数据的深层副本。真的是这样吗?如果是这样,恐怕您需要制作自己的数据结构来表示这些数据,镜像您可以通过 Ocean 的 API 读出的内容。

如果您真正想要存储的是对 Petrel 数据的弱引用(实现 IIdentifiable),您将希望保留每个对象的 Droid 的内容——这是一项简单得多的任务。

然后,当您的持久数据从您的数据源解析时,您将重建 Droid,然后可以自行解析(使用您自己的其他数据源),从而产生对该对象的常规强 .NET 引用 -当然假设此数据存在于当前加载的项目中。

Ocean SDK 中的 SimpleDataSourceExample 演示了一个使用 BinaryFormatter 由 .dat 文件支持的简单数据源。这对于修改其他后端来说是相对微不足道的。我强烈推荐 XML 而不是 BinaryFormatter,但是如果您打算存储大量的批量数据,则应该考虑使用数据库。在 Blueback Reservoir,XML 很好地满足了我们的需求。

一个小警告:确保您存储在 DataSource 中的对象实现 IDisposable(以及 IIdentifiable),以释放 DataSource 中的资源。

于 2011-06-09T21:20:37.057 回答