今天看了下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();