作者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