C 的XML序列化和反序列化4

2021-08-30 22:57:22 字數 3863 閱讀 8125

public class people

[xmlattribute("age")]

public int age

}[xmlroot("root")]

public class student : people

[xmlelement("number")]

public int number

}void main(string args)

student stu = new student()

;xmlserializer ser = new xmlserializer(typeof(student));

ser.serialize(file.create("c:\\x.xml"), stu);

反序列化物件

xmlserializer ser = new xmlserializer(typeof(student));

student stu = ser.deserialize(file.openread("c:\\x.xml")) as student;

物件陣列序列化

public class people

[xmlattribute("age")]

public int age

}[xmlroot("root")]

public class student : people

[xmlelement("number")]

public int number

}void main(string args)

liststulist = new list();

stulist.add(new student() );

stulist.add(new student() );

stulist.add(new student() );

stulist.add(new student() );

stulist.add(new student() );

xmlserializer ser = new xmlserializer(typeof(list));

ser.serialize(file.create("c:\\x.xml"), stulist);

物件陣列反序列

xmlserializer ser = new xmlserializer(typeof(list));

liststulist = ser.deserialize(file.openread("c:\\x.xml")) as list;

foreach (student s in stulist)

: : : ",

s.name, s.age, s.class, s.number));

}序列化dirctionary

public struct directionlist

void main(string args)

dictionarylist = new dictionary();

list.add("1", 100);

list.add("2", 200);

list.add("3", 300);

list.add("4", 400);

list.add("5", 500);

list.add("6", 600);

list.add("7", 700);

list.add("8", 800);

list.add("9", 900);

listdirlist = new list();

foreach (var s in list));}

xmlserializer ser = new xmlserializer(typeof(list));

ser.serialize(file.create("c:\\x.xml"), dirlist);

這裡還要講一點,在xmlserializer中,不支援dirctionary<>型別的物件,所以在序列化這種最常見型別的時候, 只能按照它的格式先建立乙個可以別序列化的型別,這裡我定義了乙個結構體,當然你也可以定義成其他的類。將dictionary<>中的資料 依次放進結構體以後就可以放入流中了。

[xmlattribute("name")]意思是將這個字段作為xml的屬性,屬性名跟在「」中

[xmlelement("value")]意思是將這個欄位做為xml的元素。

反序列化dirctionary

xmlserializer ser = new xmlserializer(typeof(list));

listdirlist = ser.deserialize(

file.openread("c:\\x.xml")) as list;

foreach (var v in dirlist)

: ", v.name, v.value);

}其實我並不喜歡這個名稱,感覺有點生化危機的feel,但是也就是這樣了,沒有太炫的地方,deserialize反序列化。真希望.net能整合dirctionary<>物件,那我們這些懶人就方便了。

在需要序列化的隊伍中,陣列是很常見的型別,其次就是了

序列化public struct imagestruct

void main(string args)

imagestruct s = new imagestruct() ;

xmlserializer ser = new xmlserializer(typeof(imagestruct));

filestream fs = file.create("c:\\x.xml");

ser.serialize(fs, s);

fs.close();

一樣的,採用結構體來儲存,這裡我還加了個的名字,到時候查詢起來也方便一些

反序列化

xmlserializer ser = new xmlserializer(typeof(imagestruct));

imagestruct s = (imagestruct)ser.deserialize(file.openread("c:\\x.xml"));

picturebox1.image = image.fromstream(new memorystream(s.picture));

沒有花頭的方式,利用memorystream來做快取,這樣會比較快一點,實際上我並沒有怎麼感覺。

陣列序列化

public struct imagestruct

void main(string args)

listimagelist = new list();

imagelist.add(new imagestruct()

);imagelist.add(new imagestruct()

);xmlserializer ser = new xmlserializer(typeof(list));

filestream fs = file.create("c:\\x.xml");

ser.serialize(fs, imagelist);

fs.close();

陣列反序列化

xmlserializer ser = new xmlserializer(typeof(list));

lists = (list)ser.deserialize(file.openread("c:\\x.xml"));

var im = from i in s

where i.number == 1

select i.picture;

//var im = s.where(p => p.number == 1).select(p => p.picture);

foreach (var image in im)

這裡還對陣列結構進行了linq查詢,這樣就可以很方便的查詢了。

Xml序列化和反序列化

1.xmlserializer 類 該類用一種高度鬆散耦合的方式提供序列化服務。你的類不需要繼承特別的基類,而且它們也不需要實現特別的介面。相反,你只需在你的類或者這些類的公共域以及讀 寫屬性裡加上自定義的特性。xmlserializer 通過反射機制讀取這些特性並用它們將你的類和類成員對映到 xm...

XML序列化和反序列化

閱讀目錄 回到頂部 由於.net framework針對xml提供了很多api,這些api根據不同的使用場景實現了不同層次的封裝,比如,我們可以直接使用xmltextreader xmldocument xpath來取數xml中的資料,也可以使用linq to xml或者反序列化的方法從xml中讀取...

XML序列化和反序列化

在談xml序列化之前,我們先來說說序列化。為什麼要做序列化和反序列化?net程式執行時,物件都駐留在記憶體中 記憶體中的物件如果需要傳遞給其他系統使用 或者在關機時需要儲存下來以便下次再次啟動程式使用就需要序列化和反序列化。序列化名詞解釋 序列化是將物件狀態轉換為可保持或傳輸的格式的過程。與序列化相...