今天看了下c#中的序列化,做了个小例子,分别将一个对象序列化到XML文件、二进制文件和内存中。
先来定义一个准备序列化的类:
[Serializable]
public class TestClass
{
private double mCD;
private double mHeight;
private double mSWA;
public double CD
{
set
{
mCD = value;
}
get
{
return mCD;
}
}
public TestClass()
{
mCD = 10;
}
public void SetValue(double height, double swa)
{
mHeight = height;
mSWA = swa;
}
}
1、将其序列化到XML文件中,可以如下所示:
TestClass test = new TestClass();
test.SetValue(30, 40);
XmlSerializer serializer = new XmlSerializer(typeof(TestClass ));
FileStream fs = new FileStream("object.XML", FileMode.Create, FileAccess.Write);
serializer.Serialize(fs, test);
fs.Close();
注意XML 序列化是将对象的公共属性 (Property) 和字段转换为序列格式(这里是指 XML)以便存储或传输的过程。反序列化则是从 XML 输出中重新创建原始状态的对象。
反序列化时可以如下所示:
TestClass test;
XmlSerializer serializer = new XmlSerializer(typeof(TestClass ));
FileStream fs = new FileStream("object.XML", FileMode.Open);
test = (TestClass )serializer.Deserialize(fs);
2、序列化到二进制文件中
一个类的所有成员变量都将被序列化,即使是那些已标记为私有的变量。
TestClass test = new testobject();
test.SetValue(30, 40);
IFormatter serializer = new BinaryFormatter();
FileStream fs = new FileStream("object.bin", FileMode.Create, FileAccess.Write);
serializer.Serialize(fs, test);
long length = fs.Length;
fs.Close();
3、上述方法是将对象序列化到文件中,如果要将几个无关类序列化到同一个二进制文件中,然后再反序列化,那么就不能使用上面的反序列化方法了。此时可以将其序列化到内存中,然后写入到二进制文件,反序列化时,将字节读到内存流中,然后翻序列化。
TestClass test = new TestClass ();
test.SetValue(30, 40);
IFormatter serializer = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
serializer.Serialize(ms, test);
//可以获取字节
long length = ms.Length;
mGetButes = ms.ToArray();
//
ms.Close();
/
TestClass test;
IFormatter serializer = new BinaryFormatter();
MemoryStream ms = new MemoryStream(mGetButes);
test = (TestClass )serializer.Deserialize(ms);
ms.Close();