从不存在的类型创建对象。了解ChangeType / Activator

时间:2017-06-08 12:55:14

标签: c# reflection

是否可以将对象及其Type参数传递给没有Type的应用程序并创建它的实例?

例如

Application A

Type Foo

我们实例化它并将值ObjectType发送到应用B

Application B

没有对Foo

类型的引用

那么可以说System.Convert.ChangeType(object, Type)并且能够转换对象或CreateInstance以便能够创建该类型的新实例吗?

如果这令人困惑,那么让我们说,我不确定ChangeType是否使用类型信息来转换类型,或者它是否简单地执行DLL查找。

1 个答案:

答案 0 :(得分:1)

.NET使用来自.DLL的类型元数据来处理类型,包括对象创建。所以,不,.NET不能在没有这个元数据的情况下创建实例。

此外,您无法在应用程序之间发送任何复杂数据。您只能将数据序列化为二进制/ XML / JSON / something-else格式,然后对其进行反序列化。

.NET应用程序可以序列化和反序列化标准.NET类型,例如。整数,浮点数,字符串,日期和时间,时间跨度,IP地址,异常等。

如果您想支持自己的类型,则应在应用程序之间共享。首先,您可以在源代码中实现它并将项目插入到两个解决方案中。其次,你可以共享DLL。至少您可以将程序集打包到NuGet数据包并将此数据包安装到两个解决方案中。

当然你应该让你的类型可序列化。