[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.SoapFormatter比BinaryFormatter更可能成功的通過防火牆。 |
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();
}
用記事本開啟的畫面,這樣夠不夠保密防諜呢
如何使用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();
}
以下為還原畫面
如何使用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();
}
如何使用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);
}
}
以下為還原畫面
如何使用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();
}
如何使用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