logo头像

Edward.K Thinking

將物件轉換成XML檔案

一般講到檔案儲存,大都是可被識別之內容的檔案居多,主要是這些檔案還是可以被某些程式開啟,不過,這次遇到卻是需要把物件作為檔案格式儲存下來,後續有需要用到時候,再把這些物件取出。不過為啥要這樣做呢?

舉例:
一個List<Dataset>物件來說,其內容在有限時間區間內是會被重複利用,若是,每次用到都要再重新取得資訊,是相當浪費資源,所以,會先將此物件以檔案型態存放,有用到就直接取得檔案就可以,避免再重複邏輯計算

所以,就必須把物件用檔案型態存放,我這邊採用XML檔案儲存。範例中先把Datatable放入list物件

1
2
3
4
System.Collections.Generic.List<System.Data.DataTable> oo = new List<DataTable>();
Data.clsData ss = new Data.clsData();
oo.Add(ss.Getdate1());
oo.Add(ss.Getdate1());

序列化需要使用到System.Xml.Serialization.XmlSerializer類別來實作

Object寫入XML File


  1. 宣告XmlSerializer物件,Type就採用序列化的型別List<System.Data.DataTable>

    1
    System.Xml.Serialization.XmlSerializer writer =new System.Xml.Serialization.XmlSerializer(typeof(List<System.Data.DataTable>));
  2. 使用System.IO.StreamWriter類別指定要寫入檔案的路徑,透過XmlSerializer的Serialize將物件寫入到XML檔案

    1
    2
    3
    4
    using (System.IO.StreamWriter WR = new System.IO.StreamWriter(Server.MapPath("eee.xml")))
    {
    writer.Serialize(WR, oo);
    }

要用Objec也是可以

1
2
3
4
5
6
Object oA = new Object();
oA = "wwww";
using (System.IO.StreamWriter WR = new System.IO.StreamWriter(Server.MapPath("eee.xml")))
{
writer.Serialize(WR, oA);
}

從XML File讀取Object


既然有寫入,當然就要讀出囉,這邊就比較簡單一點

  1. 前置作業跟寫入步驟是相同的

    1
    System.Xml.Serialization.XmlSerializer writer =new System.Xml.Serialization.XmlSerializer(typeof(List<System.Data.DataTable>));
  2. Serialize改為Deserialize且把原本是Writer改為Reader就可以,不過須注意一點,反序列化之後還必須透過轉型,才有辦法回復到原本的物件型別

    1
    2
    3
    4
    using (System.IO.StreamReader RR = new System.IO.StreamReader(Server.MapPath("eee.xml")))
    {
    oo = (List<DataTable>)writer.Deserialize(RR);
    }

這就大功告成了

上一篇