我对如何解决这个问题有一个想法,但我想知道是否有更容易和更可扩展的东西来解决我的问题。
我正在开发的程序有两种基本形式的数据:图像,以及与这些图像相关的信息。与图像相关的信息以前存储在一个极其简单的 JET 数据库(四个表)中,结果证明存储的字段既慢又不完整。我们正在转向数据存储的新实施。考虑到所涉及的数据结构的简单性,我认为数据库是多余的。
每张图像都有自己的信息(捕获参数),将是一组相互关联的图像的一部分(例如,在相同的 30 分钟内拍摄),然后是整个更大组的一部分(拍摄同一个人) )。现在,我将人员存储在具有唯一标识符的字典中。然后每个人都有一个不同图片组的列表,每个图片组都有一个图片列表。所有这些类都是可序列化的,我只是对字典进行序列化和反序列化。相当简单的东西。图像是分开存储的,因此字典的大小不会变成天文数字。
问题是:当我需要添加新的信息字段时会发生什么?有没有一种简单的方法来设置这些数据结构以考虑未来的潜在修订?过去,我在 C 中处理此问题的方式是创建一个具有大量空字节(至少为 ak)的可序列化结构,以供将来扩展,结构中的一个字节指示版本。然后,当程序读取结构时,它会根据大量的 switch 语句知道要使用哪种反序列化(旧版本可以读取新数据,因为无关数据只会进入被忽略的字段)。
C# 中是否存在这样的方案?就像,如果我有一个类是一组 String 和 Int 对象,然后我将另一个 String 对象添加到结构中,我如何从磁盘反序列化一个对象,然后将字符串添加到它?我是否需要让自己拥有多个版本的数据类,以及一个采用反序列化流并根据存储在基类中的一些版本信息处理反序列化的工厂?还是像 Dictionary 这样的类非常适合存储此类信息,因为它会自动反序列化磁盘上的所有字段,并且如果添加了新字段,我可以捕获异常并用空白字符串和整数替换这些值?
如果我使用字典方法,是否存在与文件读/写以及参数检索时间相关的速度影响?我认为如果一个类中只有字段,那么字段检索是即时的,但在字典中,与该类相关的一些小开销。
谢谢!