以下舉例說明:
(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.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
foreach (Programmer p in list)
{
Console.WriteLine(p);
}
Console.Read();
}
}
(2)總結
使用XML序列化或反序列化時,需要對XML序列化器指定需要序列化對象的類型和其關聯的類型。
XML序列化只能序列化對象的公有屬性,並且要求對象有一個無參的構造方法,否者無法反序列化。
[Serializable]和[NonSerialized]特性對XML序列化無效!所以使用XML序列化時不需要對對象增加[Serializable]特性。
閱讀更多 老孔說編程 的文章