国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#序列化成XML注意細節

2020-01-24 03:38:35
字體:
來源:轉載
供稿:網友
最常用的序列化是把某個類序列化成二進制文件.但有時我們也會把類序列化成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);
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉木乃县| 商洛市| 北海市| 通海县| 屏边| 博罗县| 拜泉县| 明星| 黔南| 临夏县| 大理市| 皮山县| 白河县| 信阳市| 将乐县| 建宁县| 崇州市| 拜泉县| 登封市| 天柱县| 抚松县| 定结县| 太湖县| 九龙坡区| 疏附县| 霍州市| 额尔古纳市| 丘北县| 张家川| 阿瓦提县| 唐山市| 织金县| 永春县| 尼勒克县| 广东省| 盘锦市| 襄汾县| 辽宁省| 天长市| 黄龙县| 玛曲县|