C#实现XML与实体类之间相互转换的方法(序列化与反序列化)
本文实例讲述了C#实现XML与实体类之间相互转换的方法。分享给大家供大家参考,具体如下:
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.IO; usingSystem.Data; usingSystem.Xml; usingSystem.Xml.Serialization; ///<summary> ///Xml序列化与反序列化 ///</summary> publicclassXmlUtil { #region反序列化 ///<summary> ///反序列化 ///</summary> ///<paramname="type">类型</param> ///<paramname="xml">XML字符串</param> ///<returns></returns> publicstaticobjectDeserialize(Typetype,stringxml) { try { using(StringReadersr=newStringReader(xml)) { XmlSerializerxmldes=newXmlSerializer(type); returnxmldes.Deserialize(sr); } } catch(Exceptione) { returnnull; } } ///<summary> ///反序列化 ///</summary> ///<paramname="type"></param> ///<paramname="xml"></param> ///<returns></returns> publicstaticobjectDeserialize(Typetype,Streamstream) { XmlSerializerxmldes=newXmlSerializer(type); returnxmldes.Deserialize(stream); } #endregion #region序列化 ///<summary> ///序列化 ///</summary> ///<paramname="type">类型</param> ///<paramname="obj">对象</param> ///<returns></returns> publicstaticstringSerializer(Typetype,objectobj) { MemoryStreamStream=newMemoryStream(); XmlSerializerxml=newXmlSerializer(type); try { //序列化对象 xml.Serialize(Stream,obj); } catch(InvalidOperationException) { throw; } Stream.Position=0; StreamReadersr=newStreamReader(Stream); stringstr=sr.ReadToEnd(); sr.Dispose(); Stream.Dispose(); returnstr; } #endregion }
/*实体对象转换到Xml*/ publicclassStudent { publicstringName{set;get;} publicintAge{set;get;} } Studentstu1=newStudent(){Name="okbase",Age=10}; stringxml=XmlUtil.Serializer(typeof(Student),stu1); Console.Write(xml); /*Xml转换到实体对象*/ Studentstu2=XmlUtil.Deserialize(typeof(Student),xml)asStudent; Console.Write(string.Format("名字:{0},年龄:{1}",stu2.Name,stu2.Age)); /*DataTable转换到Xml*/ //生成DataTable对象用于测试 DataTabledt1=newDataTable("mytable");//必须指明DataTable名称 dt1.Columns.Add("Dosage",typeof(int)); dt1.Columns.Add("Drug",typeof(string)); dt1.Columns.Add("Patient",typeof(string)); dt1.Columns.Add("Date",typeof(DateTime)); //添加行 dt1.Rows.Add(25,"Indocin","David",DateTime.Now); dt1.Rows.Add(50,"Enebrel","Sam",DateTime.Now); dt1.Rows.Add(10,"Hydralazine","Christoff",DateTime.Now); dt1.Rows.Add(21,"Combivent","Janet",DateTime.Now); dt1.Rows.Add(100,"Dilantin","Melanie",DateTime.Now); //序列化 xml=XmlUtil.Serializer(typeof(DataTable),dt1); Console.Write(xml); /*Xml转换到DataTable*/ //反序列化 DataTabledt2=XmlUtil.Deserialize(typeof(DataTable),xml)asDataTable; //输出测试结果 foreach(DataRowdrindt2.Rows) { foreach(DataColumncolindt2.Columns) { Console.Write(dr[col].ToString()+""); } Console.Write("\r\n"); } /*List转换到Xml*/ //生成List对象用于测试 List<Student>list1=newList<Student>(3); list1.Add(newStudent(){Name="okbase",Age=10}); list1.Add(newStudent(){Name="csdn",Age=15}); //序列化 xml=XmlUtil.Serializer(typeof(List<Student>),list1); Console.Write(xml); /*Xml转换到List*/ List<Student>list2=XmlUtil.Deserialize(typeof(List<Student>),xml)asList<Student>; foreach(Studentstuinlist2) { Console.WriteLine(stu.Name+","+stu.Age.ToString()); }
protectedvoidPage_Load(objectsender,EventArgse) { stringstrTest=@"<Relationships> <VariationParentxmlns='http://www.microsoft.com/schema/Products/2011-10-01'> <Identifiers> <MarketplaceASIN> <MarketplaceId>ATVPDKIKX0DER</MarketplaceId> <ASIN>B00K69WURQ</ASIN> </MarketplaceASIN> <MarketplaceASIN> <MarketplaceId>TBVPDKIKX0DER</MarketplaceId> <ASIN>C00K69WURQ</ASIN> </MarketplaceASIN> <MarketplaceASIN> <MarketplaceId>KlVPDKIKX0DER</MarketplaceId> <ASIN>D00K69WURQ</ASIN> </MarketplaceASIN> </Identifiers> </VariationParent> </Relationships>"; TextBox1.Text=""; XmlDocumentdoc=newXmlDocument(); doc.LoadXml(strTest); XmlElementroot=doc.DocumentElement; //用于带命名空间的XML操作 XmlNamespaceManagernsmgr=newXmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace("ab","http://www.microsoft.com/schema/Products/2011-10-01"); XmlNodeListmacthNodes=root.SelectNodes("//ab:Identifiers/ab:MarketplaceASIN",nsmgr); for(inti=0;i<macthNodes.Count;i++) { //删除生成的命名空间,生成标准XML。 stringmatchNode=CleanXmlnsTag(macthNodes[i].OuterXml); MarketplaceASINma=XmlUtil.Deserialize(typeof(MarketplaceASIN),matchNode)asMarketplaceASIN; if(ma!=null) { Response.Write(ma.MarketplaceId+"---------"+ma.ASIN+"<br/>"); } } } /*实体对象*/ publicclassMarketplaceASIN { publicstringMarketplaceId{set;get;} publicstringASIN{set;get;} } protectedstringCleanXmlnsTag(stringxml) { xml=xml.Replace("xmlns=\"http://www.microsoft.com/schema/Products/2011-10-01\"",""); returnxml; }
PS:小编这里再来为大家推荐几款关于xml操作的在线工具供大家免费使用。相信在以后开发中可以用的到:
在线XML格式化/压缩工具:
http://tools.jb51.net/code/xmlformat
在线XML/JSON互相转换工具:
http://tools.jb51.net/code/xmljson
xml代码在线格式化美化工具:
http://tools.jb51.net/code/xmlcodeformat
HTML/XML转义字符对照表:
http://tools.jb51.net/table/html_escape
更多关于C#相关内容感兴趣的读者可查看本站专题:《C#中XML文件操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》
希望本文所述对大家C#程序设计有所帮助。