序列化物件
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格式文件詳解,摘取一點有用資訊,開始標籤和結束標籤中...