序列化和反序列化
一、概述
何为序列化和反序列化?
我们再传递数据的和保存数据时,我们可以用一个变量记录,但是如果是一个对象改怎么办呢,这是就得用序列化和反序列化。
在计算机中,数据的存放都是二进制。我们传递数据也是传递二进制,根据这个不变性,我们把需要传递的变量序列化成一个二进制的数据保存并传递,再通过反序列化,就能够得到原来的对象。
下面是一个实现序列化和反序列化的例子,我们通过特殊属性定义了一个 [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 这里讲的比较清楚,大家可以参考

浙公网安备 33010602011771号