淺序列化:只序列化類的公用欄位和屬性
公用屬性必須是可讀且可寫的
使用命名空間:using System.Xml.Serialization;
以Book類為例:
序列化模板: public void SerializeIt(string filename)
{
XmlSerializer serializer = new XmlSerializer(typeof(Book));
StreamWriter writer = new StreamWriter(filename);
Book myBook = new Book();
serializer.Serialize(writer, myBook);
writer.Close();
}
反序列化模板: public void DeserializeIt(string filename)
{
XmlSerializer serializer = new XmlSerializer(typeof(Book));
FileStream fs = new FileStream(filename, FileMode.Open);
Book myBook = (Book)serializer.Deserialize(fs);
fs.Close();
}
*使用XmlSerializer的類必須有一個不帶參數的預設建構函式——在反序列化中使用
*序列化ArrayList類型欄位X的特殊處理:在ctor中 this.X = new ArrayList();
*對於參考關聯性,如果A中引用了B,那麼
在序列化A的時候,會產生如下格式的XML:
<A>
<B>xxxxx</B>
</A>
在還原序列化A對象的時候,A中也會包含有具體值的B對象
*淺序列化不支援循環參考,即A引用B的同時,B也引用了A
序列化時,將XML格式定製為SOAP格式:使用XmlSerializer建構函式的另一個重載: public void SerializeIt(string filename)
{
SoapReflectionImporter import = new SoapReflectionImporter();
XmlTypeMapping soapMapping = import.ImportTypeMapping(typeof(Book));
XmlSerializer serializer = new XmlSerializer(soapMapping);
StreamWriter writer = new StreamWriter(filename);
Book myBook = new Book();
serializer.Serialize(writer, myBook);
writer.Close();
}