Vb.net 序列化类型定义?

Vb.net 序列化类型定义?,vb.net,serialization,type-conversion,Vb.net,Serialization,Type Conversion,我不确定我会用正确的方法来做这件事。我有一套具有不同输出类型(自定义定义类型)的应用程序 例如,我可能有一种称为Widget的类型: Class Widget Public name as String End Class 在整个操作过程中,当用户遇到某种情况时,应用程序将获取用户收到的小部件的输出实例,对其进行序列化,并将其记录到数据库中,并注明类型的名称 现在,我有其他应用程序做类似的事情,但不是处理Widget,它可能是一些完全随机的其他类型,具有不同的属性,但我再次序列化实

我不确定我会用正确的方法来做这件事。我有一套具有不同输出类型(自定义定义类型)的应用程序

例如,我可能有一种称为Widget的类型:

Class Widget
      Public name as String
End Class
在整个操作过程中,当用户遇到某种情况时,应用程序将获取用户收到的小部件的输出实例,对其进行序列化,并将其记录到数据库中,并注明类型的名称

现在,我有其他应用程序做类似的事情,但不是处理Widget,它可能是一些完全随机的其他类型,具有不同的属性,但我再次序列化实例,将其记录到数据库,并记录类型的名称。我可能有六种不同的类型,预计未来不会有太多其他类型

说了这么多,做了这么多之后,我有了一个管理界面,可以查看这些日志,用户可以查看记录的数据内容。Admin应用程序对所有涉及的类型都有引用,并且一些基本的开关大小写逻辑依赖于类型的名称,将其转换为原始类型,并将其传递给一些具有基本显示逻辑的处理程序,以可读的格式将数据吐出(每种类型一个显示处理程序)

现在。。。这一切都很好

直到有一天,我的模型改变了。小部件类现在已经弃用了name属性,并添加了一系列其他属性。当然,当我尝试重新构建此数据时,我会在管理端得到类型不匹配


我想知道,在运行时,是否有某种方法可以通过我的代码进行反思,并在此时获取类型定义的快照,将其序列化,并将其与数据一起存储,以便将来以某种方式使用它来重建它

我不需要这样做,因为在MFC时代,这是一个相当手动的过程,因此在.Net中的工作方式会有所不同,但这可能还是有用的。我们当时解决问题的方法是,当我们序列化任何内容时,我们还编写了一个版本号,并且只添加了新的数据位以供写入,我们从未删除或修改任何内容(尽管我们会输出空数据,因此,例如,如果名称被删除,我们会将其作为空字符串写入)

然后,反序列化程序将使用大量if语句,如果数据超过版本X,它将只读取数据的某些部分,当它读取了反序列化程序中提到的所有内容时,它将忽略其后的任何内容

这样做的最大好处是,数据可以被较旧和较新版本的应用程序读取,虽然很明显,只有当应用程序可以对任何缺失的数据使用一些合适的默认值时,它才会起作用,但如果您只想在管理工具中查看数据,这应该不是一个问题,这样做的好处是,每次对模型进行更改时,更新管理工具就不那么紧迫了