2

我正在尝试将对象缓存序列化到磁盘,以便下次加载程序时可以加载它。正在保存的类的特征之一是它包含对其他对象的引用。例如:我有一个存储远程 url、本地文件路径、是否已下载等的图像类列表。然后我将可见性绑定到下载的文件并将源绑定到本地文件路径。其他对象具有对此图像的引用,因此当下载图像时,它会更新一次,并且所有指向它的项目的所有绑定都会更新。

作为快速修复,我实现了一个二进制格式化程序,并且一切正常。我的所有列表都序列化到磁盘,当我重新加载它们时,所有引用都保留(创建了 IE 1 图像对象,并且使用它的所有内容都有一个引用,而不是反序列化,每次出现时都会创建一个新的 Image 实例)

我的问题是我应该使用什么样的 Serialier 来存储到磁盘而不破坏我的引用?我读过 BinaryFormatter 对于序列化到磁盘并期望它在不同版本中工作是一个糟糕的选择。尽管到目前为止我没有遇到任何问题,但我不想在一年后遇到问题并强迫我的所有用户重新获取他们所有缓存的元数据。

我不是 100% 确定所有不同的序列化程序是如何工作的,但我想如果我要使用 XML,我可能需要编写某种转换器。如果有帮助,我的所有图像对象都分配了一个 GUID,所以我对每个对象都有一些独特的东西。

更新:我刚刚发现了以下问题,它看起来类似于通过 Serialize/Deserialize 维护对象引用 谁能告诉我 Datacontractserializer 是否是跨不同版本的应用程序的长期序列化存储的好选择与 binaryformatter 的缺点相比?

4

3 回答 3

0

不需要任何转换器和东西,只需检查一下:

http://www.switchonthecode.com/tutorials/csharp-tutorial-xml-serialization

于 2012-07-10T10:15:32.787 回答
-1

MongoDb可能有用。有关C# 或其他类型的数据库,请参阅MongoDB: DB4Object

并且似乎对 SQLite 很有用。使用 blob 将图像存储为二进制。

于 2012-07-10T10:16:06.327 回答
-1

SqlLite可能会有所帮助,它易于使用。

于 2012-07-10T10:18:46.670 回答