作者MRjk (QOO)
看板C_Sharp
標題[心得] Serialize的簡單範例 & binary和xml存檔方式比較
時間Sat Jun 6 01:50:21 2009
網誌版 :
http://blog.wahahajk.com/2009/06/c-serialize-binaryxml.html
C# 的Serialize功能能讓我們很容易的幫自訂類別進行存檔
一般Serialize有2種作法 一種是存成
binary 一種是存成
xml
網路上的範例都太複雜了 基本的作法如下 幾行程式碼而已
首先 當然你的
class要有[
Serializable]的標籤
ex:
[Serializable]
public class myclass
{
public string text;
public int number;
public float number2;
public myclass()
{
text = "abc";
number = 3;
number2 = 12.34;
}
}
myclass myobj=
new myclass();
然後兩種作法的讀寫範例程式碼如下 看你是要存成
binary還是存成
xml:
binary存檔
IFormatter binFmt = new BinaryFormatter();
Stream s = File.Open("binary存檔檔名", FileMode.Create);
binFmt.Serialize(s, myobj);
s.Close();
binary讀檔
IFormatter binFmt = new BinaryFormatter();
Stream s = File.Open("binary存檔檔名", FileMode.Open);
myobj = (myclass)binFmt.Deserialize(s);
s.Close();
------
xml存檔
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.
XmlSerializer(myobj.GetType());
Stream s = File.Open("xml存檔檔名", FileMode.Create);
ser.Serialize(s, myobj);
s.Close();
xml讀檔
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.
XmlSerializer(myobj.GetType());
Stream s = File.Open("xml存檔檔名", FileMode.Open);
myobj = (myclass)ser.Deserialize(s);
s.Close();
======
binary和
xml存檔方式的比較
binary較省空間 但可維護性較差 移植性也比較差 存檔只能由程式開啟
若遺失了原始的class定義 資料很難parse回來 因為是二進位格式
而xml存檔格式較通用
即使本來的程式遺失了仍然可透過xml parser把存檔中的子元素救回來
使用者也可直接透過記事本或xml editer編輯存檔裡的元素 不需透過特定程式
但是xml檔案所佔容量較大 且並非所有.NET原生物件都能存成xml
某些型別在Serialize成xml時會有問題
例如Font , Color等高階型別只能由binary寫入 透過XML方式寫入會產生執行時期錯誤
(這方面應該是.NET函式庫沒做好 技術上來說那些高階型別存成xml並不是不可能
或許有其他原因是我不知道的)
相關文章:
c# serizable碰到的小問題
http://blog.wahahajk.com/2009/05/c-serizable.html
--
http://blog.wahahajk.com
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.165.73.97
※ 編輯: MRjk 來自: 218.165.73.97 (06/06 01:51)
※ 編輯: MRjk 來自: 218.165.73.97 (06/06 01:52)
1F:推 leo60037:推 06/06 01:55
2F:推 james732:推!! 06/06 02:06
3F:推 ideaup:good 06/06 06:48
4F:推 megaman1206:xml可經由GZipStream做壓縮 06/06 07:48
5F:推 adrianc:推 剛好提供一個新方向給這兩天的工作 06/06 23:11