当我在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,因为它返回版本号。将来,如果版本号发生变化,我将无法使用类型名称反序列化对象。
答案 0 :(得分:1)
您需要获取包含命名空间的类型的全名:
var typeName = obj.GetType().FullName;
Type type2 = Type.GetType(typeName);
答案 1 :(得分:0)
代替.ToString()
使用Type.FullName或Type.AssemblyQualifiedName属性。
FullName
不包含程序集版本。该部分位于AssemblyQualifiedName
。