C#中的序列化与反射?
什么是序列化与反序列反,程序序列化后有什么作用,最大的区别是什么,能举个例子最好,反射对程序有什么效果!...
什么是序列化与反序列反,程序序列化后有什么作用,最大的区别是什么,能举个例子最好,反射对程序有什么效果!
展开
2个回答
2013-07-30
展开全部
序列化是将对象状态转换成可保持或传输的格式。
反序列化是将流转换为对象。
序列化和反序列化的作用是:使数据能够被轻松的存储和传输。
在.net框架里提供了这样两个类:
BinaryFormatter:使用二进制格式化程序进行序列化。
SoapFormatter:以xml格式化
XmlSerializer类
DotNet中的序列化方法有三种:XML 序列化、SOAP 序列化和二进制序列化。若是序列化到文件的话,前两者生成的是 XML 文件,二进制序列化生成二进制文件。
比如我做一个软件的配置信息,或者网站的配置,就像数据库连接地址等,我们的配置信息是一个类来管理的,而在磁盘上对应一个xml文件来存储这个配置信息,程序开始运行的时候,读取这个xml,我们需要反序列化这个xml为配置类的一个实例,程序中我们就可以运用这个配置类的实例了,而当我们设置程序的时候,我们更改的是该实例的一些属性,最后保存,我们就是通过序列化该对象到那个配置的xml文件,这就是最常见的序列化与反序列化
反射是动态生成类的实例,这样可以根据需要实例化哪个类,不必写死了,比如我们的网站如果可以在后台里设置是用什么类型的数据库,就要用到反射,根据配置文件,用户选的是哪种类型的数据库,我们就通过反射实例化哪种类型数据库管理类
反序列化是将流转换为对象。
序列化和反序列化的作用是:使数据能够被轻松的存储和传输。
在.net框架里提供了这样两个类:
BinaryFormatter:使用二进制格式化程序进行序列化。
SoapFormatter:以xml格式化
XmlSerializer类
DotNet中的序列化方法有三种:XML 序列化、SOAP 序列化和二进制序列化。若是序列化到文件的话,前两者生成的是 XML 文件,二进制序列化生成二进制文件。
比如我做一个软件的配置信息,或者网站的配置,就像数据库连接地址等,我们的配置信息是一个类来管理的,而在磁盘上对应一个xml文件来存储这个配置信息,程序开始运行的时候,读取这个xml,我们需要反序列化这个xml为配置类的一个实例,程序中我们就可以运用这个配置类的实例了,而当我们设置程序的时候,我们更改的是该实例的一些属性,最后保存,我们就是通过序列化该对象到那个配置的xml文件,这就是最常见的序列化与反序列化
反射是动态生成类的实例,这样可以根据需要实例化哪个类,不必写死了,比如我们的网站如果可以在后台里设置是用什么类型的数据库,就要用到反射,根据配置文件,用户选的是哪种类型的数据库,我们就通过反射实例化哪种类型数据库管理类
东莞大凡
2024-08-07 广告
2024-08-07 广告
在东莞市大凡光学科技有限公司,我们利用Halcon软件处理机器视觉项目时,会用到自定义标定板以满足特定需求。Halcon支持用户根据实际应用场景自定义标定板形状与标记点。这不仅可以灵活应对不同工作环境,还能提高标定精度。通过调整圆点数量、间...
点击进入详情页
本回答由东莞大凡提供
2013-07-30
展开全部
NET里边某些类已经实现了ISerializable接口,比如DataTable DataSet等,那么这些类就可以随意被序列化和反序列化。对于自己写的某个类想要实现序列化功能,就必须实现ISerializable接口。
对于楼主希望实现复杂类型属性的序列化,这个完全是你自己编程实现的,并不是程序自动帮你序列化的。实现过程就是你的复杂类继承ISerializable,实现GetObjectData方法。
//序列化
Image I = new Bitmap(...);
System.IO.MemoryStream M=new System.IO.MemoryStream();
I.Save(M, I.RawFormat);
byte[] B = M.ToArray();
...
//反序列化
M = new System.IO.MemoryStream(B);
I = new Bitmap(M);
对于楼主希望实现复杂类型属性的序列化,这个完全是你自己编程实现的,并不是程序自动帮你序列化的。实现过程就是你的复杂类继承ISerializable,实现GetObjectData方法。
//序列化
Image I = new Bitmap(...);
System.IO.MemoryStream M=new System.IO.MemoryStream();
I.Save(M, I.RawFormat);
byte[] B = M.ToArray();
...
//反序列化
M = new System.IO.MemoryStream(B);
I = new Bitmap(M);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询