C# 的序列化
基礎篇
C# 簡介
開發環境
變數與運算
流程控制
陣列
函數
物件
例外處理
函式庫篇
檔案處理
資料結構
正規表達式
Thread
應用篇
視窗程式
媒體影音
網路程式
遊戲程式
手機程式
資料庫
雲端運算
特殊功能
委派
擴展方法
序列化
LinQ
WPF
網路資源
教學影片
投影片
教學文章
軟體下載
考題解答
101習題
序列化是將程式中的物件儲存到檔案串流的一種技術,C# 支持三種序列化機制,分別是 BinaryFormatter, SoapFormatter 與 XmlSerializer 等三種,其中前兩種可以反序列化,因此您若想用 XML 的方式序列化,可以使用 SoapFormatter。
以下程式是使用這三種技術進行序列化的範例。
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Xml.Serialization;
using System.Collections;
[Serializable]
public class Radio {
public bool hasTweeters;
public bool hasSubWoofers;
public double[] stationPresets;
[NonSerialized]
public string radioID = "001";
}
[Serializable]
public class Car {
public Radio theRadio = new Radio();
public bool isHatchBack;
}
[Serializable, XmlRoot(Namespace = "http://www.yoursite.com")]
public class JamesBondCar : Car {
public JamesBondCar(bool SkyWorthy, bool SeaWorthy) {
canFly = SkyWorthy;
canSubmerge = SeaWorthy;
}
public JamesBondCar() { }
[XmlAttribute]
public bool canFly;
[XmlAttribute]
public bool canSubmerge;
}
class Program {
static void Main(string[] args) {
JamesBondCar jbc = new JamesBondCar();
jbc.canFly = true;
jbc.canSubmerge = false;
jbc.theRadio.stationPresets = new double[] { 89.3, 105.1, 97.1 };
jbc.theRadio.hasTweeters = true;
BinaryFormatter binFormat = new BinaryFormatter();
Stream fStream = new FileStream("CarData.dat",FileMode.Create, FileAccess.Write, FileShare.None);
binFormat.Serialize(fStream, jbc);
fStream.Close();
fStream = File.OpenRead("CarData.dat");
JamesBondCar carFromDisk =(JamesBondCar)binFormat.Deserialize(fStream);
Console.WriteLine("Can this car fly? : {0}", carFromDisk.canFly);
fStream.Close();
SoapFormatter soapForamt = new SoapFormatter();
fStream = new FileStream("CarData.soap",FileMode.Create, FileAccess.Write, FileShare.None);
soapForamt.Serialize(fStream, jbc);
fStream.Close();
XmlSerializer xmlForamt = new XmlSerializer(typeof(JamesBondCar),new Type[] { typeof(Radio), typeof(Car) });
fStream = new FileStream("CarData.xml",FileMode.Create, FileAccess.Write, FileShare.None);
xmlForamt.Serialize(fStream, jbc);
fStream.Close();
ArrayList myCars = new ArrayList();
myCars.Add(new JamesBondCar(true, true));
myCars.Add(new JamesBondCar(true, false));
myCars.Add(new JamesBondCar(false, true));
myCars.Add(new JamesBondCar(false, false));
fStream = new FileStream("CarCollection.xml",FileMode.Create, FileAccess.Write, FileShare.None);
xmlForamt = new XmlSerializer(typeof(ArrayList),new Type[] { typeof(JamesBondCar), typeof(Car), typeof(Radio) });
xmlForamt.Serialize(fStream, myCars);
fStream.Close();
}
}
Post preview:
本網頁的作者、授權與引用方式
- 作者
- 陳鍾誠,於金門大學資訊工程系,電子郵件:wt.ude.uqn|ccc#wt.ude.uqn|ccc,網站:http://ccckmit.wikidot.com。
- 授權
- 本文採用創作共用 (Creative Common) 3.0 版的 姓名標示─非商業性─相同方式分享 授權條款,歡迎轉載或修改使用,但若做為商業使用時必須取得授權,引用本文時請參考下列格式。
- 中文版 (APA格式)
- 陳鍾誠 (10 Jun 2010 04:05),(網頁標題) C# 的序列化,(網站標題) 免費電子書:C# 程式設計,10 Jun 2010 04:05,取自 http://cs0.wikidot.com/serialize ,網頁修改第 4 版。
- 英文版 (APA格式)
- Chung-Chen Chen (10 Jun 2010 04:05), Retrieved 10 Jun 2010 04:05 from http://cs0.wikidot.com/serialize, Page Revision 4.
page revision: 4, last edited: 01 Aug 2019 02:59