當前位置:成語大全網 - 新華字典 - 請教C#下如何序列化自定義結構或類

請教C#下如何序列化自定義結構或類

C#可以序列化,壹般可以轉成[二進制序列化][SOAP序列化][XML 序列化],就舉個XML的例子吧。寫了壹個類並序列化和反序。

1、我寫的是控制臺程序

2、要引用using System.Xml.Serialization;using System.IO;

3、Person類中,Address屬性我定義了忽略,他不會被序列化,所以妳打開XML是看不到這個字段的。

4、文件我寫死了,是D盤的1234.xml,妳可以改。

=====代碼====

[Serializable]

public?class?Person

{

///?<summary>

///?姓名

///?</summary>

public?string?Name?{?get;?set;?}

///?<summary>

///?年齡

///?</summary>

public?int?Age?{?get;?set;?}

///?<summary>

///?地址,屬性指這個字段不序列化

///?</summary>

[XmlIgnore]

public?string?Address?{?get;?set;?}

}

上面是個類,要序列化,就要寫特性[Serializable],下面是我寫的兩個方法

///?<summary>

///?序列化

///?</summary>

///?<param?name="type"></param>

///?<param?name="obj"></param>

static?void?CreateSerialize(Type?type,?object?obj)

{

XmlSerializer?xs?=?new?XmlSerializer(type);

Stream?stream?=?new?FileStream(@"d:\1234.XML",?FileMode.Create,?FileAccess.ReadWrite,?FileShare.ReadWrite);

xs.Serialize(stream,?obj);

stream.Close();

}

///?<summary>

///?反序

///?</summary>

///?<param?name="type"></param>

///?<returns></returns>

static?object?XMLDeserialize(Type?type)

{

XmlSerializer?xs?=?new?XmlSerializer(type);

Stream?stream?=?new?FileStream(@"d:\\1234.XML",?FileMode.Open,?FileAccess.Read,?FileShare.Read);

var?str?=?xs.Deserialize(stream);

stream.Close();

return?str;

}

妳可以在主程序中Main()中調用上面的方法,我給了例子。

//建立幾個對象

List<Person>?list?=?new?List<Person>()

{

new?Person(){?Name?=?"張三",?Age?=?18,?Address?=?"A小區"?},

new?Person(){?Name?=?"李四",?Age?=?21,?Address?=?"B小區"?},

new?Person(){?Name?=?"王五",?Age?=?23,?Address?=?"C小區"?},

new?Person(){?Name?=?"趙六",?Age?=?17,?Address?=?"D小區"?},

new?Person(){?Name?=?"錢七",?Age?=?22,?Address?=?"E小區"?},

};

foreach?(var?obj?in?list)

{

Console.WriteLine("Name?=?"?+?obj.Name?+?"\tAge?=?"?+?obj.Age?+?"\t地址?=?"?+?(String.IsNullOrEmpty(obj.Address)"空"?:?obj.Address));

}

Console.WriteLine("序列化開始....");

CreateSerialize(typeof(List<Person>),?list);

Console.WriteLine("序列化結束....");

Console.WriteLine("反序列化開始....");

var?dList?=?XMLDeserialize(typeof(List<Person>))?as?List<Person>;

foreach?(var?obj?in?dList)

{

Console.WriteLine("Name?=?"?+?obj.Name?+?"\tAge?=?"?+?obj.Age?+?"\t地址?=?"?+?(String.IsNullOrEmpty(obj.Address)"空"?:?obj.Address));

}

Console.WriteLine("反序列化結束....");

Console.ReadKey();

這只是個簡單的例子。