c XML序列化與反序列化

2021-06-20 03:20:12 字數 3312 閱讀 7487

序列化物件

public class people

[xmlattribute("age")]

public int age

}[xmlroot("root")]

public class student : people

[xmlelement("number")]

public int number

}void main(string args)

;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)

);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));}

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)

;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)

);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查詢,這樣就可以很方便的查詢了。

C xml序列化與反序列化 特性的使用

示例,主要包括system.xml.serialization命名空間下的xmlroot xmlelement xmlattribute xmltext xmlignore等特性的簡單使用,高階使用可自行檢視msdn。實體類 xmlroot 資訊 該特性標記為根節點 public class inf...

序列化和反序列化 C 序列化與反序列化。

序列化介紹 把物件用一種新的格式來表示。系列化只序列化資料。序列化不建議使用自動屬性 為什麼要序列化 將乙個複雜的物件轉換流,方便儲存與資訊交換。class program class person public int age 二進位制序列化 就是將物件變成流的過程,把物件變成byte class...

C XML序列化與反序列化與XML格式詳解

1 xml是有層次結構的,序列化實際就是記憶體化,用連續的結構化的記憶體來儲存表示乙個物件,那麼這兩者之間就有區別了,檢視下面的對應規則。看上面鏈結裡給出的例子應該就差不多可以看明白了。下面看下xml格式的詳解。2 xml格式詳解。3 另一篇xml格式文件詳解,摘取一點有用資訊,開始標籤和結束標籤中...