序列化[Serializable]

      昨晚研究了一哈序列化问题,以前还以为是什么高深的技术,故此经常是避而不用,避而不谈,现在看来是我错了哦!^_^ 其实在.NET中使用序列化是很简单的事情了,希望我写这点东西,对想研究这个的同胞们一个小小的提示吧!我觉得要掌握序列化问题,至少要明白以下几点:

 

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://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.youkuaiyun.com/jigee/archive/2005/09/19/484445.aspx>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值