[C#.NET][VB.NET] 物件序列化 Serialization

  • 26246
  • 0
  • C#
  • 2009-08-11

[C#.NET][VB.NET] 物件序列化 Serialization

何謂序列化

1.序列化(Serializing)可分為二進位、SOAP、XML及自訂序列化,四種

2.序列化是將資訊轉換成,可被儲存或傳送位元資料流的一種過程

3.建立可序列化需用Serializable屬性

4.被序列化的文件,需使用還原序列化(Deserializing),將資料還原。

 

序列化比較表

BinaryFormatter System.Runtime.Serialization.Formatters.Binary
1.它是序列化物件最有效率。
2.它所序列化的物件只能讓.Net Framework為主的應用程式讀取。
SoapFormatter System.Runtime.Serialization.Formatters.Soap
1.它是以XML為主的格式,也是序列化最可靠的方法。
2.它所序列化的物件可以透過網路傳輸。
3.它可讓非.Net Framework的應用程式讀取。
4.SoapFormatterBinaryFormatter更可能成功的通過防火牆。
XmlSerializer System.Xml.Serialization
1.使用XML可以輕易的讓不同作業系統的應用程式所讀取。

如何使用BinaryFormatter序列化,寫

1.匯入System.Runtime.Serialization.Formatters.Binary命名空間

2.引用串流物件  

 

3.初始二進位序列化  

 

4.建立資料  

 

5.將序列化後的資料寫入文件

 

6.釋放資源並存檔

        private void button1_Click(object sender, EventArgs e)
        {
            //2.引用串流開啟檔案
            FileStream myWriter = new FileStream("Serial.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite);
            //3.初始二進位序列化
            BinaryFormatter myBfWrite = new BinaryFormatter();
            //4.資料
            string myStr =
                "這是一個簡單的二進位序列化\n" +
                "這樣的格式還蠻好玩的\n" +
                "檔案產生後會在\\C#.Net序列化\\WindowsApplication1\\WindowsApplication1\\bin\\Debug\\\n" +
                "你可以用軟體(記事本)將它打開看看\n" +
                DateTime.Now.ToString();
            //5.用Serialize方法將序列化指定到檔案
            myBfWrite.Serialize(myWriter, myStr);
            //6.釋放資料
            myWriter.Dispose();
        }

 

 

用記事本開啟的畫面,這樣夠不夠保密防諜呢

1

  

如何使用BinaryFormatter序列化,讀

1.匯入System.Runtime.Serialization.Formatters.Binary命名空間

2.引用串流物件

 

3.初始二進位序列化

4.序列化檔案還原

 

5.輸出並關檔

        private void button2_Click(object sender, EventArgs e)
        {
            //2.引用串流開啟檔案
            FileStream myReader = new FileStream("Serial.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite);
            //3.初始二進位序列化
            BinaryFormatter myBfRead = new BinaryFormatter();
            //4.將序列化資料還原
            string myData = (string)myBfRead.Deserialize(myReader);
            //5.輸出
            Console.WriteLine(myData);
            //6.釋放資料
            myReader.Dispose();
        }

 

 

 

以下為還原畫面

 

 

 

1

 

如何使用SoapFormatter序列化,寫

1.預設情況下SoapFormatter並不會被納入參考,所以必須手動加入System.Runtime.Serialization.Formatters.Soap參考

2.匯入System.Runtime.Serialization.Formatters.Soap命名空間

3.引用串流物件

4.初始SOAP序列化 

5.使用Hashtable建立資料

6.將序列化後的資料寫入文件

 

 

 

7.釋放資源並存檔

        private void button3_Click(object sender, EventArgs e)
        {
            //3.引用串流開啟檔案
            FileStream myFS = new FileStream("DataFile.XML", FileMode.OpenOrCreate, FileAccess.ReadWrite);
            //4.初始SOAP序列化
            SoapFormatter mySF = new SoapFormatter();
            //5.建立Hashtable類別資料
            Hashtable myData = new Hashtable();
            myData.Add("1", " 王先生 , 高雄市 , 已婚 , 29歲 , 竊盜罪");
            myData.Add("2", " 老先生 , 彰化縣 , 未婚 , 29歲 , 竊盜罪");
            myData.Add("3", " 張太太 , 南投縣 , 已婚 , 46歲 , 無前科");
            myData.Add("4", " 李小姐 , 台北市 , 已婚 , 13歲 , 無前科");
            //6.用Serialize方法將序列化指定到檔案
            mySF.Serialize(myFS, myData);
            //7.釋放資料
            myFS.Close();
        }

 

 

1

如何使用SoapFormatter序列化,讀

1.預設情況下SoapFormatter並不會被納入參考,所以必須手動加入System.Runtime.Serialization.Formatters.Soap參考

2.匯入System.Runtime.Serialization.Formatters.Soap命名空間

3.引用串流物件

 

4.初始SOAP序列化

5.還原序列化物件並輸出

        private void button4_Click(object sender, EventArgs e)
        {
            //3.引用串流開啟檔案
            FileStream myFS = new FileStream("DataFile.XML", FileMode.Open);
            //4.初始SOAP序列化
            SoapFormatter mySF = new SoapFormatter();
            //5.讀資料至還原序列化
            Hashtable myData = (Hashtable)mySF.Deserialize(myFS);
            //6.輸出
            foreach (DictionaryEntry de in myData)
            {
                Console.WriteLine("{0} , {1}", de.Key, de.Value);
            }
        }

 

 

 

以下為還原畫面

 

 

1

如何使用XmlSerializer序列化,寫

1.匯入XmlSerializer命名空間

2.引用串流物件開啟檔案

3.建立資料

4.初始XML序列化

 

5.序化列資料寫入

6.釋放資料並存檔

 

        private void button5_Click(object sender, EventArgs e)
        {
            //2.引用串流開啟檔案
            FileStream myFs = new FileStream("SerializeData.XML", FileMode.OpenOrCreate, FileAccess.ReadWrite);
            //3.建立資料
            string myStr =
                "這是一個簡單的XML序列化\n" +
                "這樣的格式還蠻好玩的\n" +
                "檔案產生後會在\\C#.Net序列化\\WindowsApplication1\\WindowsApplication1\\bin\\Debug\\\n" +
                "你可以用軟體(記事本)將它打開看看\n";
            //4.序列化列初始化
            XmlSerializer myXS = new XmlSerializer(typeof(string));
            //5.序列列資料寫入
            myXS.Serialize(myFs, myStr);
            //6.釋放資料
            myFs.Close();
        }

1

如何使用XmlSerializer 序列化,讀

1.匯入XmlSerializer命名空間

2.引用串流物件開啟檔案

3.初始XML序列化

 

4.將還原後的資料寫入變數

5.釋放資料並存檔

        private void button6_Click(object sender, EventArgs e)
        {
            //2.引用串流開啟檔案
            FileStream myFs = new FileStream("SerializeData.XML", FileMode.OpenOrCreate, FileAccess.ReadWrite);
            //3.序列化初始化
            XmlSerializer myXS = new XmlSerializer(typeof(string));
            //4.讀資料至還原序列化
            string myData = (String)myXS.Deserialize(myFs);
            //5.輸出並存檔
            Console.WriteLine(myData);
            myFs.Close();
        }

 

 

 

範例已包含C#與VB

範例下載:序列化.rar

 

]]>

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo