![]() |
1
3
不,如果不发出类型定义,这将无法工作。您要做的是实际保存代码(否则,如何
因此,如果需要保存行为和状态,则需要保留历史代码,使用某种类型的反射发出技巧将类型定义持久化为可加载程序集,或者使用将数据视为可执行代码的动态编程技巧。
当我以前做过版本化序列化时,我通常在对象上有自定义的序列化逻辑和一个“version”属性-使用这个,我可以创建一个我已经移动并重命名的类型-比如
|
![]() |
2
0
好吧,您可以将所有这些可序列化类保存在它们自己的DLL中,用应用程序打包这些DLL,并在运行时加载这些DLL。这样,即使从应用程序的最新版本中移除类,加载的DLL仍然可以工作。 这似乎是一个可怕的方法,尽管…现在,您的客户机正在运行源代码管理存储库中甚至不再有的古老代码。你应该如何调试它? |
![]() |
3
0
您所说的不是类属性序列化,而是进程序列化(或方法-不重要)。但与属性序列化不同,它应该包含在需要时运行的MSIL代码。因此,您必须以某种方式将其转换为bin代码,然后由assembly.load运行。我想这不是一个简单的方法。因此,如果可能的话-将MyClass的实现存储到一个单独的dll中,或者作为一个字符串(使用C语言),以便通过反射进一步编译和执行。 |