做序列化测试的时候,我自己定义的一个MyObject类,序列化的时候用它的一个实例去GetType没问题,但是反序列化的时候用Type.GetType("MyObject")返回为null。why??
于是从系统定义的类型开始,发现Type.GetType("String")同样返回为null,试着加上命名空间:Type.GetType("System.String")问题即刻得以解决。用同样的办法,加上我自己定义类的命名空间Type.GetType("Serialization.MyObject")就OK了。尽管我的CS文件都在同一个命名空间下,还是需要加上。但是这样:typeof(MyObject)就完全没问题。于是继续思考~~~~~~~~~
Type type = Type.GetType("System.Data.SqlClient.SqlConnection");//null
Type type = Type.GetType("System.Data.SqlClient.SqlConnection,System.Data");//null
Type type = Type.GetType("System.Data.SqlClient.SqlConnection,System.Data,Version=1.0.3300.0,Culture=neutral, PublicKeyToken=b77a5c561934e089");
这个问题设计到命名空间和装配件的关系,要查找一个类,必须指定它所在的装配件,或者在已经获得的Assembly实例上面调用GetType。.Net装配件编译的时候,默认都引用了mscorlib.dll,可以省略装配件名称,除非在编译的时候明确指定不引用它,比如: