为什么Type.GetType()不能在这个字符串上工作?

时间:2017-06-20 21:01:26

标签: c#

当我在Type对象上执行ToString()时,我得到了这个字符串。但是,当我在同一个字符串上调用GetType时,我得到一个空值。我该如何解决这个问题?

Type type1 = obj.GetType();
string str = type1.ToString(); //Returns A+B+CGeneric`1+D[E+F]

Type type2 = Type.GetType(str); //Returns null

是否与(+)符号有关,而不是(。)?

编辑 - 我试图避免调用fullname,因为它返回版本号。将来,如果版本号发生变化,我将无法使用类型名称反序列化对象。

2 个答案:

答案 0 :(得分:1)

您需要获取包含命名空间的类型的全名:

var typeName = obj.GetType().FullName;
Type type2 = Type.GetType(typeName);

答案 1 :(得分:0)

代替.ToString()使用Type.FullNameType.AssemblyQualifiedName属性。

FullName不包含程序集版本。该部分位于AssemblyQualifiedName