[心得] Serialize的簡單範例 & binary和xml存쀠…

看板C_Sharp (C#)作者 (QOO)時間17年前 (2009/06/06 01:50), 編輯推噓5(500)
留言5則, 5人參與, 最新討論串1/3 (看更多)
網誌版 : 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(); ====== binaryxml存檔方式的比較 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)

06/06 01:55, , 1F
06/06 01:55, 1F

06/06 02:06, , 2F
推!!
06/06 02:06, 2F

06/06 06:48, , 3F
good
06/06 06:48, 3F

06/06 07:48, , 4F
xml可經由GZipStream做壓縮
06/06 07:48, 4F

06/06 23:11, , 5F
推 剛好提供一個新方向給這兩天的工作
06/06 23:11, 5F
文章代碼(AID): #1AALhW0f (C_Sharp)
文章代碼(AID): #1AALhW0f (C_Sharp)