序列化和反序列化
一、概述
何为序列化和反序列化?
我们再传递数据的和保存数据时,我们可以用一个变量记录,但是如果是一个对象改怎么办呢,这是就得用序列化和反序列化。
在计算机中,数据的存放都是二进制。我们传递数据也是传递二进制,根据这个不变性,我们把需要传递的变量序列化成一个二进制的数据保存并传递,再通过反序列化,就能够得到原来的对象。
下面是一个实现序列化和反序列化的例子,我们通过特殊属性定义了一个 [Serializable]class myobject,在myobject中又有一个 [NoSerializable]的变量age
通过变量传递后,我们发现,age的值是默认值0,而不是23.
这说明,只有实现了序列化的变量/值,才能被传递,其他的不能。
class Program { static void Main(string[] args) { Byte[] myArray = Seriliaze(new myObject()); Console.WriteLine(DeSeriliaze(myArray)); Console.ReadKey(); } /// <summary> /// 序列化程序 /// </summary> /// <param name="obj"></param> /// <returns></returns> static Byte[] Seriliaze(myObject obj) { ///IFormatter 提供将序列化对象格式化的功能 ///BinaryFormatter 用二进制方式序列化或反序列化一个对象 IFormatter formatter = new BinaryFormatter(); using (MemoryStream stream = new MemoryStream()) { formatter.Serialize(stream, obj); //将对象序列化成一个内存流 return stream.ToArray(); //将内存流放入一个字节数组,并返回 } } /// <summary> /// 序列化程序 /// </summary> /// <param name="obj"></param> /// <returns></returns> static myObject DeSeriliaze(Byte[] byteArray) { ///IFormatter 提供将序列化对象格式化的功能 ///BinaryFormatter 用二进制方式序列化或反序列化一个对象 IFormatter formatter = new BinaryFormatter(); //将字节数组放到内存流中 using (MemoryStream stream =new MemoryStream(byteArray)) { return (myObject)formatter.Deserialize(stream); //将内存流反序列化成一个对象返回 } } } /// <summary> /// 一个用来测试序列化的类 /// </summary> [Serializable] class myObject { String name = "nimei"; [NonSerialized] int age = 23; public myObject() { } public override string ToString() { return String.Format("my name is {0};age is {1}",name,age); } }
二、详细
实现序列化的方法有哪些呢?
在.net中是先序列化的方法有:BinaryFormatter,SoapFormatter,XmlSerilizer
http://www.cnblogs.com/ejiyuan/archive/2009/01/21/1379256.html 这里讲的比较清楚,大家可以参考