我正在尝试将对象缓存序列化到磁盘,以便下次加载程序时可以加载它。 要保存的类的一个功能是它包含对其他对象的引用。 例如: 我有一个存储远程URL,本地文件路径的图像类列表,如果它已被下载等等....然后我将可见性绑定到已下载,将源绑定到本地文件路径。 其他对象具有对此图像的引用,因此在下载图像时,它会更新一次,并且所有绑定都会在指向它的所有项目上更新。
作为一个快速修复,我实现了一个二进制格式化程序,一切正常。我的所有列表都被序列化为磁盘,当我重新加载它们时,所有引用仍然存在(I.E 1图像对象已创建,使用它的所有内容都有一个引用,而不是反序列化每次出现时都会创建一个新的Image实例)
我的问题是我应该使用什么样的Serialier存储到磁盘而不破坏我的引用?我已经读过BinaryFormatter是一个不错的选择,可以序列化到磁盘并期望它可以在不同版本中运行。虽然到目前为止我没有遇到任何问题,但我不想在未来一年遇到问题,并强迫所有用户重新获取所有缓存的元数据。
我不是100%确定所有不同的序列化程序是如何工作的,但我认为如果我使用XML,我可能需要编写某种转换器。如果有帮助,我的所有图像对象都会分配一个GUID,因此我对每个对象都有一些独特的东西。
更新:我刚刚发现以下类似的问题Maintain object references through Serialize/Deserialize 任何人都可以告诉我Datacontractserializer是否适用于不同版本的应用程序的长期序列化存储与二进制格式的缺点?
答案 0 :(得分:0)
不需要任何转换器和东西,只需检查一下:
http://www.switchonthecode.com/tutorials/csharp-tutorial-xml-serialization
答案 1 :(得分:-1)
MongoDb 可能有用。见MongoDB for C# 或其他类型的数据库: DB4Object
似乎是SQLite有用的。使用blob将商店图像作为二进制文件。
答案 2 :(得分:-1)
SqLite可以帮助它,它易于使用。