c#中的序列化

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章