.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格式的介绍。
作者“人道编程”
补充:Web开发 , ASP.Net ,