序列化初识

序列化在远程调用是必不可少的一件武器..平时我们一般也就序列化一些自己定义好的类..在类前面加入可序列化标志即可([Serializable])

所以直接这样..(一般常用的是二进制的哈~)

Code

但偶尔也会碰到不能序列化的.比如说Pen,Brush,Matrix 这些,难道序列化就行不通了吗?呵呵。.答案是否定的~~

接下来我们需要写一个类来让它可序列化..

比如Pen为例

首先继承ISerializationSurrogate接口: 实现序列化代理项选择器,此选择器允许一个对象对另一个对象执行序列化和反序列化。

它有2个方法 一个是GetObjectData : 使用将对象序列化所需的数据填充所提供的 System.Runtime.Serialization.SerializationInfo。

第二个是 SetObjectData:使用 System.Runtime.Serialization.SerializationInfo 中的信息填充对象。

Code

这里只写了几个Pen 的属性.可以把想要的属性加进来即可,好。我们完成了这个类。继续.该如何用它呢??

我们知道前面序列化过程里 BinaryFormatter  有个属性是SurrogateSelector.

SurrogateSelector ss = new SurrogateSelector();

ss.AddSurrogate(typeof(Pen),new StreamingContext( StreamingContextStates.All),new PenSurrogate ());

formatter .SurrogateSelector =ss;

Code

序列化和反序列化都要一样..

这样我们就完成了Pen的序列化...今天对序列化的一点小总结..

posted @ 2008-08-26 23:54  阳光下的风  阅读(257)  评论(0)    收藏  举报