《c#XML序列化与反序列化.pdf》由会员分享,可在线阅读,更多相关《c#XML序列化与反序列化.pdf(250页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、c#XML序列化与反序列化1乂 nJ/J lZ A A 4 r I J JLJJL11CUL)J L DJLJLJLiaLLJJL J不|,很不爽,只能改成了BinaryWriter和BinaryReader来读写,突然想到能不能用XML来序列化?于是在网上查了些资料便写了些实践性代码,做些记录,避免以后忘记。序列化对象public class PeopleXmlAttribute(nNAMEn)public string Name set;get;XmlAttribute(nAGEn)public int Age set;get;XmlRoot(nRootn)public class Stu
2、dent:PeopleXmlElement(nCLAS S)public string Class set;get;XmlElement(nNUMBERn)public int Number set;get;void Main(string args)Student stu 二 new Student()c oIIClass=Class One,Name=Tom,Number=1XmlSerializer ser=newXmlSerializer(typeof(Student);ser.Serialize(File.Create(nC:x.xml)stu);反序列化对象XmlSerialize
3、r ser 二 newXmlSerializer(typeof(Student);Student stu 二ser.Deserialize(File.OpenRead(nC:x.xmln)as Student;对象数组序列化public class PeopleXmlAttribute(nNAMEn)public string Name set;get;XmlAttribute(nAGEn)public int Age set;get;XmlRoot(nRootn)public class Student:PeopleXmlElement(nCLAS S)public string Class
4、 set;get;XmlElement(nNUMBERn)public int Number set;get;void Main(string args)List stuList 二new List();stuList.Add(new Student()Age=10,Number 二 1,Name 二”Tom Class Class Onen);stuList.Add(new Student()Age=11,Number 二 2,Name 二nJayn,Class=nClassTwon);stuList.Add(new Student()Age=12,Number 二 3,Name 二nPet
5、n,Class=nClass Onen);stuList.Add(new Student()Age=13,Number 二 4,Name 二May,Class=Class Three”);stuList.Add(new Student()Age=14,Number 二 5,Name 二nSoyn,Class=nClassTwon);XmlSerializer ser 二 newXmlSerializer(typeof(List);ser.Serialize(File.Create(HC:x.xml 工 stuList);对象数组反序列XmlSerializer ser 二 newXmlSeri
6、alizer(typeof(List);List stuList 二ser.Deserialize(File.OpenRead(nC:x.xmln)as List;fo9 ch (Student s in s tu L is t)MessageBox.Show(string.Format(n0:l:2:3s.Name,s.Age,s.Class,s.Number);序列化Dire tionarypublic struct DirectionListXmlAttribute(N ame)public string Name;XmlElement(n Value)public int Value;
7、void Main(string args)Dictionary list二 new Dictionary();list.Add(nr,100);list.AddC2 200);list.Add(n3n,300);list.Add(n4n,400);list.Add(n5n,500);list.AddC6 600);list.Add(n7n,700);list.Add(n8n,800);list.AddC9 900);List dirList二 new List();foreach(var s in list)dirList.Add(newDirectionList()Name 二 s.Key
8、,Value 二 s.Value);XmlSerializer ser 二 newXmlSerializer(typeof(List);ser.Serialize(File.Create(HC:x.xmldirList);I-L-/4 /Q I|1 7 I H,I。E 4 I)、7只能按照它的格式先创建一个可以别序列化的类型,这里我定义了一个结构体,当然你也可以定义成其他的类。将Dictionary。*中的数据依次放进结构体以后就可以放入流中了。XmlAttribute(nNamen)意思是将这个字段作为xml的房性,属性名 跟 在 中XmlElement(1*Valuen)意思是将这个字段做
9、为xml的元素。反序列 化DirctionaryXmlSerializer ser 二 newXmlSerializer(typeof(List);List dirList=ser.Deserialize(File.OpenRead(nC:x.xmln)asList;foreach(var v in dirList)Console.WriteLine(n0:1 v.Name,v.Value);是这样了,没有太炫的地方,Deserialize反序列化。真希望.Net能集成Dirctionaryo对象,那我们这些懒人就方便了。在需要序列化的队伍中,数组是很常见的类型,其次就是图片了序列化图片pub
10、lic struct ImageStructXmlAttribute(nN umber)public int number;XmlElement(!f Imag en)public byte picture;void Main(string args)ImageStruct()number=1,picture=File.ReadAllBytes(n 11.jpgn);XmlSerializer ser 二 newXmlSerializer(typeof(ImageStruct);FileStream fs=File.Create(nc:x.xmln);fs.CloseQ;一样的,采用结构体来保
11、存图片,这里我还加了个图片的名字,到时候查找起来也方便一些图片反序列化XmlSerializer ser 二 newXmlSerializer(typeof(ImageStruct);ImageStruct s=(ImageStruct)ser.Deserialize(File.OpenRead(nc:x.xmln);pictureBoxl.Image 二Image.FromStream(newMemory S tream(s.picture);I 4 I-7 7 I Q/7memorystream来做缓存,这样会比较快一点,实际上我并没有怎么感觉。图片数组序列化public struct I
12、mageStructXmlAttribute(nN umber)public int number;XmlElement(!f Imag en)public byte picture;void Main(string args)ListimageList=newLi s t();imageList.Add(newImageStruct()number=1,picture=File.Read AIIB y te s(11.jpg)cimageList.Add(newImageStruct()number=2,picture=File.ReadAUBytes(n22.jpgn)cXmlSerial
13、izer ser 二 newXmlSerializer(typeof(List);FileStream fs=File.Create(nc:x.xmln);ser.Serialize(fs,imageList);fs.CloseQ;图片数组反序列化XmlSerializer ser 二 newXmlSerializer(typeof(List);List s 二(List)ser.Deserialize(File.OpenRead(nc:x.xmln);var im=from i in swhere i.number=1select i.picture;/var im=s.Where(p=p.number=l).Select(p=p.picture);foreach(var image in im)pictureBoxi.Image 二Image.FromStream(newMemoryStream(image);这里还对数组结构进仃Linq查询,这样就可以很方便的查询图片了。要序列化的对象的类:Serializablepublic class Personprivate string name;public string Namereturn name;Iname=value;