.NET中序列化(一)

本人编程道行很浅,只有两三年的道行,所以本文的内容讲的不深入,只供给菜鸟们看看,所以老鸟们不要笑我,欢迎老鸟们指出问题,也欢迎新手们讨论。

我写文章的目的有两个,1是想巩固消化自己所学的内容,2是能和广大的程序猿讨论。

-------------------------------------------------废话分割线-------------------------------------------------

      大家都知道.NET中的对像中存着许多的状态(成员变量),当我们想把对象保存起来,我们就要通过数据库把数值存放起来,下次使用时在从数据库中把数值取出,重新赋值到对像上。开发人员就要编写一大串的机械式的代码,就不能把有效果的时间发在业务上。现在向大家介绍个对像序列化的功能,可以把对像序列化成二进制或soap格式的文件,当下次需要在用该对像的状态就可以直接反序列化该文件,生成对像。

  说了那么多,直接上例子吧。

  [Serializable]
public class MyClass
{
public string Name
{
get;
set;
}


public int Age
{
get;
set;
}
}

在对像上加个[Serializable]属性就是告诉编译器该类是可以被序列化的,

对客户端还要使用有命名空间System.Runtime.Serialization.Formatters.Binary中的BinaryFormatter类,将MyClass 的对像序列化成二进制的文件流写入到文件中

客户端例子

            MyClass my = new MyClass();
my.Name = "凤姐";
my.Age = int.MaxValue;
System.Runtime.Serialization.IFormatter formatter = new BinaryFormatter();

//创建一个文件流
Stream stream = new FileStream(@"c:\MyClass.bin", FileMode.Create, FileAccess.Write);

using (stream)
{
//这里就是进行序列化了
formatter.Serialize(stream, my);
}

哈哈哈OK了,对像被序列化进去了。当你的程序闭关下次要用的时候就将c:\MyClass.bin的文件反序列化出来就好了,反序列化出来的对像的Nam值还是凤姐,Age值还是int.MaxValue

现在我将介绍如何反序列化

客户端例子

            //不用NEW了反序列化后会给出一个该对像的引用
MyClass my;
System.Runtime.Serialization.IFormatter formatter = new BinaryFormatter();

//打开一个文件流
Stream stream = new FileStream(@"c:\MyClass.bin", FileMode.Open, FileAccess.Read);

using (stream)
{
//这里就是反进行序列化了
my = (MyClass)formatter.Deserialize(stream);
}

现在最简单的 序列化和反序列化都介绍完了大家可以看出,我们不用去把数据库在数据库中在去数据库取数据构造对像,序列化的功能在一些特殊的场景还是比较方便的

这里我只是介绍下变量为值类型的,下次我介绍为引用类型的序列化、和不可序列化、序列化成SOAP格式的介绍。

posted @ 2011-09-21 10:31  小明你怎么了  阅读(4628)  评论(7编辑  收藏  举报