C# 为什么要反序列化类型为';类型';是否需要描述类型本身?

C# 为什么要反序列化类型为';类型';是否需要描述类型本身?,c#,.net,deserialization,C#,.net,Deserialization,我有一个带有插件的应用程序,它是动态加载的。我将这些程序集中的类型保存在类型对象数组中。然后,当应用程序关闭时,它通过序列化将该数组保存到一个文件中。当应用程序启动时,加载此文件并尝试对其进行反序列化,会发生错误,因为包含这些类型中描述的类的程序集不可用。我不明白为什么会这样:类型“type”在mscorlib或类似的东西中。对象类型是否引用了它所描述的类型?请考虑类型的属性类型。返回对包含类型的程序集的引用。为了获得该引用,必须加载程序集(可能“仅用于反射”)。同样,您可以要求一个类型提供其所

我有一个带有插件的应用程序,它是动态加载的。我将这些程序集中的类型保存在类型对象数组中。然后,当应用程序关闭时,它通过序列化将该数组保存到一个文件中。当应用程序启动时,加载此文件并尝试对其进行反序列化,会发生错误,因为包含这些类型中描述的类的程序集不可用。我不明白为什么会这样:类型“type”在mscorlib或类似的东西中。对象类型是否引用了它所描述的类型?

请考虑类型的属性
类型
。返回对包含类型的程序集的引用。为了获得该引用,必须加载程序集(可能“仅用于反射”)。同样,您可以要求一个类型提供其所有方法,等等-如果没有程序集,您希望它如何工作

我假设一个
类型
可以序列化,这样所有属性值都只在需要时填充,因此您可以有一个
类型
对象,它引用缺少的程序集中的类型。。。但这会很奇怪


如果您只想依赖于
类型本身,那么您可能应该保留完全限定的类型名称,而不是
类型本身?

反序列化将创建一个新对象。这需要调用对象构造函数。存储在其中一个程序集中。Hm。在这种情况下,我可以问另一个问题:“type”类型的属性AssemblyQualifiedName是否总是唯一的?它可能会与其他程序集的类型或相同程序集但新版本的类型混淆吗?@Praetor12:AssemblyQualifiedName包含程序集名称,因此为“AssemblyQualified”。同样,它也包括名称空间。现在,您可能有两个同名的程序集(如果它们不是强类型的),尽管我不确定如何将它们加载到同一AppDomain中。在绝大多数情况下,AssemblyQualifiedName应该足够了。我只需要确保类型不会相互混淆。而且,可能的话,程序集中会有几种类型,只是版本不同。@Praetor12:如果它们是强名称程序集,我相信这应该没问题。如果您依赖于程序集版本号,但没有强命名,那么这可能还不够好。我建议您尝试一下,看看在每种情况下程序集限定名中都有什么。