如何在我的自定义数据源中序列化Petrel属性并将其加载回来?

时间:2011-06-09 20:27:54

标签: ocean petrel

我对海洋序列化不太“流利”。 我可以将整个Petrel属性(属性,网格或任何其他Petrel / Ocean的对象)序列化到我的自定义DataSource中吗?我可以加载吗? 这样做有什么好的做法/模式吗? 我们欢迎一些代码示例!

1 个答案:

答案 0 :(得分:2)

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

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

现在,从你的问题来看,听起来你正在寻找存储你提到的Petrel数据的深层副本。这是真的的情况吗?如果是这样,我担心您需要建立自己的数据结构来表示这些数据,反映您可以通过Ocean的API读取的内容。

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

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

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

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