序列化是將一個對象保存到存儲介質(zhì)上或者將對象進(jìn)行轉(zhuǎn)換使之能夠在網(wǎng)絡(luò)上傳送的行為。在一個對象被序列化之后,你會想要將它反序列化,也就是將數(shù)據(jù)重新轉(zhuǎn)換為可用的對象的行為。這種類型的功能被用在一個對象必須被從一個上下文封送到另一個上下文的時候,例如當(dāng)對象跨越App域的時候。另外一個例子是Web服務(wù)——對象在服務(wù)器上被序列化,通過網(wǎng)絡(luò)被(封送或)發(fā)送到的客戶端,然后被反序列化成有用的對象。
從二進(jìn)制到XML,.NET框架為開發(fā)人員提供了很多序列化選項(xiàng),甚至允許開發(fā)人員創(chuàng)建自己的序列化例程。在本文中,我將著重討論XML的序列化,并告訴你如何利用這一內(nèi)置的功能。
XML序列化
.NET框架提供的一種形式的序列化是XML序列化。在這種類型的序列化里,對象狀態(tài)被以XML格式保存。這使得被序列化的對象能夠被不同的系統(tǒng)取得并修改,甚至是那些不是用.NET編寫的系統(tǒng)。另外一個優(yōu)勢是被序列化的對象對于人來說是可讀和可寫的——因此更新對象的方式莫過于打開寫字板更改其值。
XML序列化常常被來遠(yuǎn)程控制項(xiàng)目和Web服務(wù)項(xiàng)目里,雖然你可能會在別的地方發(fā)現(xiàn)它,比如DataSet封送。在與Xpath查詢和Predicate方法一起使用的時候,XML序列化能夠被用來實(shí)現(xiàn)面向?qū)ο蟮臄?shù)據(jù)庫——我會在今后的文章里談這方面的內(nèi)容。
使用XML序列化
在.NET框架里利用內(nèi)置的XML序列化方法相對較為容易。你只需要熟悉一些類和屬性就可以開始使用簡單的XML序列化了:
System.Xml.Serialization命名空間:含有使用XML序列化所需要的類和功能。這個命名空間應(yīng)該被放在使用XML序列化的類的頂部的一個“using”命令里。
XmlSerializer類:提供將對象序列化和反序列化的功能。
XmlIgnore屬性:告訴XmlSerializer類跳過你不希望序列化的成員。
這個列表只不過讓你對序列化有一個初步的了解。還有更多的對象可以供你在使用XML序列化的時候使用。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Serialization;
using System.IO;
namespace 對象的xml序列化
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
emp ei = new emp();
ei.a = "測試a";
ei.b = "測試b";
XmlSerializer xmls = new XmlSerializer(typeof(emp));
StringWriter sw = new StringWriter();
xmls.Serialize(sw, ei);
MessageBox.Show(sw.ToString());
}
}
public class emp
{
public string a;
public string b;
public emp()
{ }
}
}