使用XML方式序列化和反序列化

以下舉例說明:

(1)XML序列化與反序列化的程序示例

public class Person

{

public string Name;//姓名

public bool Sex;//性別,是否是男

public Person() { }//必須提供無參構造器,否則XmlSerializer將出錯

public Person(string name, bool sex)

{

this.Name = name;

this.Sex = sex;

}

public override string ToString()

{

return "姓名:" + this.Name + "\t性別:" + (this.Sex ? "男" : "女");

}

}

public class Programmer : Person

{

public string Language;//編程語言

public Programmer() { }//必須提供無參構造器,否則XmlSerializer將出錯

public Programmer(string name, bool sex, string language) : base(name, sex)

{

this.Language = language;

}

public override string ToString()

{

return base.ToString() + "\t編程語言:" + this.Language;

}

}

class Program

{

static void Main(string[] args)

{

//創建Programmer列表,並添加對象

List list = new List();

list.Add(new Programmer("李志偉", true, "C#"));

list.Add(new Programmer("Coder2", false, "C++"));

list.Add(new Programmer("Coder3", true, "Java"));

//使用XML序列化對象

string fileName = @"D:\\users\lizw\桌面\Programmers.xml";//文件名稱與路徑

Stream fStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);

XmlSerializer xmlFormat = new XmlSerializer(

typeof(List),

new Type[] { typeof(Programmer),typeof(Person) }

);//創建XML序列化器,需要指定對象的類型

xmlFormat.Serialize(fStream, list);

//使用XML反序列化對象

fStream.Position = 0;//重置流位置

list.Clear();

list = (List)xmlFormat.Deserialize(fStream);

foreach (Programmer p in list)

{

Console.WriteLine(p);

}

Console.Read();

}

}

(2)總結

使用XML序列化或反序列化時,需要對XML序列化器指定需要序列化對象的類型和其關聯的類型。

XML序列化只能序列化對象的公有屬性,並且要求對象有一個無參的構造方法,否者無法反序列化。

[Serializable]和[NonSerialized]特性對XML序列化無效!所以使用XML序列化時不需要對對象增加[Serializable]特性。


分享到:


相關文章: