1、为什么要用序列化?
2、序列化有那些属性?
3、序列化的过程是什么样的?
4、序列化有那些格式?
5、怎样保证序列化的安全问题?
1、为什么要用序列化?
有的时候需要使对象 能够持续化,比如在两个不同的应用程序中,使用相同的对象,这样我们就可以把对象序列化到文件系统中,通过解序列化的方式来恢复原来对象的副本或原形;还 一个用处就是用在.net Remoting中/远程模型,大家可能知道,他有两种模型:一,通过复制的方式来得到远程对象。二,按引用的方式来得到远程对象。其中使用方式一时就要 用到序列化这种技术。
2、序列化有那些属性?
有Serializable,Noserialized,有时可以根据需要实现ISerializable接口
比如:序列化一个类:
[Serializable]
public class jianghua
{
[Noserialized] int myTest;//不需要被序列化
//.....
}
3、序列化的过程是什么样的?
先序列化成一个对象ID,通过对象管理器自动管理,在这个过程中是使用ObjectIDGenerator ,ObjectManager 来操作的。
4、序列化有那些格式?
在.NET下提供了三种格式序列化:
BinaryFormatter
SoapFormatter
XmlSerializer
5、怎样保证序列化的安全问题?
如果有的对象中包含一些敏感的数据,在序列化时就要小心了,我们可以借助
System.Secuiry这个空间中的方法来对对象的数据进行加密
最后列举一个例子:
假设有一个类MyClass
[Serializable]
public class MyClass
{
public string name="";
private int age=22;
public String address=null;
}
例:使用SoapFormatter来序列化
MyClass mysoap=new MyClass();
mysoap.name="jianghua";
mysoap.address="Xi Hua Universtiy...";
IFormatter myformater=new SoapFormatter();
Stream stream=new FileStream("c:http://www.cnblogs.com/tianfu_net/admin/file://soap.xml",filemode.create,fileaccess.write,fileshare.none/);
myformater.Serializable(stream,mysoap);
stream.close();
说明:对于反序列化操作其思路基本一样,在这里附带说明以下,什么叫深序列化,什么叫浅序列化
所谓深序列化就是序列化对象中所有的公有,私有成员;浅序列化就是只序列化对象的公有成员了。比如:SoapFormatter ,BinaryFormatter 就是深序列化,XmlSerializer是浅序列化;在实际开发时要注意其名称空间的使用,一般都包括以下一些名称空间:
System.Runtime.Serialization.Formatters.Binary;
System.Runtime.Serialization.Formatters.Soap;
System.Runtime.Serialization;
System.IO;
System.Xml.Serialization;
引自 <http://blog.csdn.net/jigee/archive/2005/09/19/484445.aspx>