C#序列化成XML注意細節

來源:互聯網
上載者:User

最常用的序列化是把某個類序列化成二進位檔案.但有時我們也會把類序列化成xml檔案.
假如有如下一個類 複製代碼 代碼如下:class Arwen
{
private Hashtable table = new Hashtable();
private TimeSpan time = new TimeSpan(0, 0, 1);
public Hashtable Table
{
get { return table; }
set { table = value; }
}
public TimeSpan Time
{
get { return time; }
set { time = value; }
}
public string Name { get; set;}
}

如果你把上面的類Arwen序列化成二進位是一點問題都沒有.只在在前面用加個[Serializable]就行.另外如果類中還有欄位或屬性是類的話也要在那個類相應的類定義前面加[Serializable].如果類中的某個欄位或屬性不想被序列化只在在它前面加[NonSerialized]即可. 序列化成二進位相當於把所有資訊原封不動儲存到二進位檔案中.不管是private欄位還是public的.也不管是啥類型的
而序列化成xml則相較序列化成二進位受到很多限制,主要有三個.
1是只能序列化public的欄位或屬性.
2是有些類型是不能序列化.比如上面的Hastable和TimeSpan這樣的類型.
3是類中必須有無參的建構函式才能被序列化成xml.
那如果你實在想儲存Hastable和TimeSpan這樣類型的資訊時咋整啊?

那隻能曲線救國了啊.中間做個轉換,先把Hastable 和Timespan轉換成其他類型.然後序列化成xml,還原序列化回來的時候再轉換下.那也意味你要在原來的類中添加某個類型.比如新弄一個類pairs,有兩欄位,對應Hastable的索引值對,然後用個List<pairs>把Hastable中所有資訊儲存起來.此時List<pairs>是可以被序列化的. 這顯然是個非常麻煩也非常笨的辦法.不過貌似沒更好的辦法啊.TimeSpan反正就可以先轉換成string類型了.

下面只說下xml轉換的簡單用法.像上面說的Hashtable等類型不能被序列化,那可以用個特性讓其顯式聲明為不可被序列化.用[XmlIgnoreAttribute]即可 複製代碼 代碼如下:using System.Xml.Serialization;
using System.IO;
class Arwen
{
private Hashtable table = new Hashtable();
private TimeSpan time = new TimeSpan(0, 0, 1);
public Arwen()
{
}
[XmlIgnoreAttribute]
public Hashtable Table
{
get { return table; }
set { table = value; }
}
[XmlIgnoreAttribute]
public TimeSpan Time
{
get { return time; }
set { time = value; }
}
}
Arwen weiwen = new Arwen();
weiwen.Time = new TimeSpan(1,2,3); // 1 hours , 2 minutes, 3 seconds
weiwen.Table.Add("arwen", 250);
string filename = @"c:\temp\arwen.xml";
XmlSerializer xs = new XmlSerializer(typeof(Arwen));
using (FileStream file = new FileStream(filename, FileMode.Create))
xs.Serialize(file, sa);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.