关于Type.GetType()的问题

做序列化测试的时候,我自己定义的一个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"); //成功  Type tt = typeof(SqlConnection)自然也没问题
  

  这个问题设计到命名空间和装配件的关系,要查找一个类,必须指定它所在的装配件,或者在已经获得的Assembly实例上面调用GetType。.Net装配件编译的时候,默认都引用了mscorlib.dll,可以省略装配件名称,除非在编译的时候明确指定不引用它,比如:   
     System.String是在mscorlib.dll中声明的,故Type = Type.GetType(“System.String”)是正确的。或者说是因为Type.GetType函数和"System.String"都System.dll这个程序集中。  
   而调用Type.GetType("System.Data.SqlClient.SqlConnection")会失败,是因为System.Data.SqlClient.SqlConnection不在System.dll中. 修改为Type.GetType("System.Data.SqlClient.SqlConnection","System.data")仍会失败,是因为必须指定强名称程序集才能唯一确定你所指定的程序集(dll)。如果你同时安装了.Net FrameWork1.0和1.1,那么就有2个不同的System.Data.dll。所以只用"System.Data"这个文件名称是不能确定你所指定的程序集的(dll).这也就是强名称程序集存在的原因之一。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值