C#实现复杂XML的序列化与反序列化
2023-06-13 09:15:45 时间
本文以一个实例的形式讲述了C#实现复杂XML的序列化与反序列化的方法。分享给大家供大家参考。具体方法如下:
已知.xml(再此命名default.xml)文件,请将其反序列化到一个实例对象。
Default.XML文件如下:
<?xmlversion="1.0"encoding="utf-8"?> <config> <rules> <rulename="namea"> <params> <itemname="p"type="get"pattern="(ios|android|)"/> <itemname="cid"type="get"pattern="(ios|android|)"/> <itemname="type"type="get"pattern="(ios|android|)"/> <itemname="sort"type="get"pattern="(ios|android|)"/> <itemname="action"type="post"pattern="(ios|android|)"/> <itemname="userAgent"type="header"pattern="(ios|android|)"/> </params> </rule> <rulename="nameb"> <params> <itemname="p"type="get"pattern="(ios|android|)"/> <itemname="cid"type="get"pattern="(ios|android|)"/> <itemname="type"type="get"pattern="(ios|android|)"/> <itemname="sort"type="get"pattern="(ios|android|)"/> <itemname="action"type="post"pattern="(ios|android|)"/> <itemname="userAgent"type="header"pattern="(ios|android|)"/> </params> </rule> <rulename="namec"> <params> <itemname="p"type="get"pattern="(ios|android|)"/> <itemname="cid"type="get"pattern="(ios|android|)"/> <itemname="type"type="get"pattern="(ios|android|)"/> <itemname="sort"type="get"pattern="(ios|android|)"/> <itemname="action"type="post"pattern="(ios|android|)"/> <itemname="userAgent"type="header"pattern="(ios|android|)"/> </params> </rule> <rulename="named"> <params> <itemname="p"type="get"pattern="(ios|android|)"/> <itemname="cid"type="get"pattern="(ios|android|)"/> <itemname="type"type="get"pattern="(ios|android|)"/> <itemname="sort"type="get"pattern="(ios|android|)"/> <itemname="action"type="post"pattern="(ios|android|)"/> <itemname="userAgent"type="header"pattern="(ios|android|)"/> </params> </rule> </rules> </config>
C#示例代码如下:
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Xml.Serialization; namespace多层级反序列 { [XmlType(TypeName="config")] publicclassXmlConfig { [XmlArray("rules")] publicList<rule>rules{get;set;} } [XmlType(TypeName="rule")] publicclassrule { [XmlAttribute] publicstringname{get;set;} [XmlArray("params")] publicList<paramsItem>@params{get;set;} } [XmlType(TypeName="item")] publicclassparamsItem { [XmlAttribute] publicstringname{get;set;} [XmlAttribute] publicstringtype{get;set;} [XmlAttribute] publicstringpattern{get;set;} } classProgram { staticvoidMain(string[]args) { /* XmlConfigxml1=DeserializeFromXml<XmlConfig>("default.xml"); XmlConfigxml=newXmlConfig(); SerializeToXml<XmlConfig>("default.xml",xml); */ XmlConfigxml1=DeserializeFromXml<XmlConfig>("default.xml"); } ///<summary> ///XML序列化某一类型到指定的文件 ///</summary> ///<paramname="filePath"></param> ///<paramname="obj"></param> ///<paramname="type"></param> publicstaticvoidSerializeToXml<T>(stringfilePath,Tobj) { try { using(System.IO.StreamWriterwriter=newSystem.IO.StreamWriter(filePath)) { System.Xml.Serialization.XmlSerializerxs=newSystem.Xml.Serialization.XmlSerializer(typeof(T)); xs.Serialize(writer,obj); } } catch(Exceptionex) { } } ///<summary> ///从某一XML文件反序列化到某一类型 ///</summary> ///<paramname="filePath">待反序列化的XML文件名称</param> ///<paramname="type">反序列化出的</param> ///<returns></returns> publicstaticTDeserializeFromXml<T>(stringfilePath) { try { if(!System.IO.File.Exists(filePath)) thrownewArgumentNullException(filePath+"notExists"); using(System.IO.StreamReaderreader=newSystem.IO.StreamReader(filePath)) { System.Xml.Serialization.XmlSerializerxs=newSystem.Xml.Serialization.XmlSerializer(typeof(T)); Tret=(T)xs.Deserialize(reader); returnret; } } catch(Exceptionex) { returndefault(T); } } } }
希望本文所述对大家的C#程序设计有所帮助。
相关文章
- C# 匿名方法和拉姆达表达式「建议收藏」
- C# 哈希_java哈希码
- Python 基于xml.etree.ElementTree实现XML对比
- 【愚公系列】2023年01月 .NET/C#知识点-LINQ和lambda实现左、右、内链接
- 关于C# XML序列化的一个BUG的修改详解编程语言
- C#属性(Property)
- MySQL中如何使用XML(mysql中xml)
- MySQL与XML开启数据持久存储新时代(.xml mysql)
- MySQL和XML表相结合的完美解决方案(mysql xml 表)
- 使用MySQL实现XML数据导入(mysql xml 导入)
- C#序列化成XML注意细节
- C#的XML两种代码注释实例说明
- C#数据绑定控件中的DataSource属性浅谈
- C#控制台输出进度和百分比的实例代码
- C#中XmlTextWriter读写xml文件详细介绍
- C#读取XML中元素和属性值的实现代码
- 在C#中创建和读取XML文件的实现方法
- C#实现提高xml读写速度的方法
- C#利用XML创建Excel文档的实现方法
- C#之Socket操作类实例解析
- C#策略模式(StrategyPattern)实例教程