《利用XML序列化實現程序配置文件_》由會員分享,可在線閱讀,更多相關《利用XML序列化實現程序配置文件_(6頁珍藏版)》請在裝配圖網上搜索。
1、利用XML序列化實現程序配置文件_
有些應用程序在退出的時候,會將一些設置值寫入到文件里,以便下次程序啟動時調用,這個文件統(tǒng)稱為配置文件。例如:Windows的掃雷程序,在每次啟動的時候,都會消失在上次關閉的位置,就是由于掃雷程序在退出的時候將當前位置寫入到配置文件里。
早期的配置文件的實現有兩種方法。一是INI文件,在Win32的API中還特地有讀寫INI文件的API函數;另一個是注冊表,這也是許多程序的首選,在版本較新的掃雷程序就是利用注冊表實現配置函數。不過,上述的兩種方法都有其的局限性。INI文件,結構簡潔,簡單編輯,有容量的上限(64K)。注冊表雖然沒有容量的限制,不過
2、讀寫注冊表還是一件很麻煩的事,而且還簡單在注冊表中產生冗余(刪除程序的時候還得操作注冊表),也有和其他程序想沖的可能。最主要的問題就是,無論是INI文件還是注冊表都只能實現簡潔的配置讀寫,很難實現類似對象的讀寫,由于他們的條目之間是平行的,而不是類似樹狀的節(jié)點結構(注冊表雖能實現樹狀結構,但是讀寫還是比較麻煩,也不太平安)。
而利用XML文件就能很好的彌補上面的不足。首先是文件型的,不會讀寫注冊表,不會有平安的后顧之憂;其次沒有文件容量大小的限制,而且XML文件天生是樹狀結構,很適合實現對象的讀寫。目前XML文件的應用越來越廣泛,已經成為主流,你任憑打開一個程序所在的名目,很少不看到X
3、ML文件的,而且主流的開發(fā)軟件都有讀寫XML的庫文件。操作XML文件現在是很便利的一件事。
XML文件序列化是XML技術的一個分支,他可以把程序中的一個對象(例如自己編寫的類的一個實例)序列化成XML文件。他也可以把XML文件反序列化為程序中的一個對象。
有關XML序列化比較好的文章,我個人感覺下面這篇比較好。
NET對象的XML序列化和反序列化
這就給了我們的一個思路,我們可以把要讀寫的配置封裝在自己編寫的配置類中,然后通過XML序列化,來實現配置類和XML文件的轉化。
例如:下面這個例子就是利用XML序列化在類對象和XML之間轉換,用的是C#
4、 下面例子中的xml schema 描述了一個簡潔的人力資源信息,其中包含了xml的大部分格式,如xml 元素相互嵌套, xml元素既有元素值,又有屬性值。
1. 待序列化的類層次結構
[XmlRoot("humanResource")]public class HumanResource
{
private int m_record = 0;
private Worker[] m_workers = null;
[XmlAttribute(AttributeName="record")]public int Record
{
g
5、et { return m_record; }
set { m_record = value;
}
[XmlElement(ElementName="worker")]public Worker[] Workers
{
get { return m_workers; }
set { m_workers = value; }
}
}
public class Worker
{
private string m_number = null;
private InformationItem[] m_inf
6、oItems = null;
[XmlAttribute("number")]public string Number
{
get { return m_number; }
set { m_number = value; }
}
[XmlElement("infoItem")]public InformationItem[] InfoItems
{
get { return m_infoItems; }
set { m_infoItems = value; }
}
}
public class In
7、formationItem
{
private string m_name = null;
private string m_value = null;
[XmlAttribute(AttributeName = "name")]public string Name
{
get { return m_name; }
set { m_name = value; }
}
[XmlText]public string Value
{
get { return m_value; }
set { m_valu
8、e = value; }
}
}
2. 序列化生成的xml結構
?xml version="1.0" ?
humanResource xmlns:xsi="" xmlns:xsd="" record="2"
worker number="001"
infoItem name="name"Michale/infoItem
infoItem name="sex"male/infoItem
infoItem name="age"25/infoItem
/worker
worker number="002"
infoItem name="name"Surce/infoItem
infoItem name="sex"male/infoItem
infoItem name="age"28/infoItem
/worker
/humanResource
更多信息請查看IT技術專欄
...