C#實(shí)現(xiàn)復(fù)雜XML的序列化與反序列化
本文以一個實(shí)例的形式講述了C#實(shí)現(xiàn)復(fù)雜XML的序列化與反序列化的方法。分享給大家供大家參考。具體方法如下:
已知.xml(再此命名default.xml)文件,請將其反序列化到一個實(shí)例對象。
Default.XML文件如下:
<?xml version="1.0" encoding="utf-8" ?> <config> <rules> <rule name="namea"> <params> <item name="p" type="get" pattern="(ios|android|)" /> <item name="cid" type="get" pattern="(ios|android|)" /> <item name="type" type="get" pattern="(ios|android|)" /> <item name="sort" type="get" pattern="(ios|android|)" /> <item name="action" type="post" pattern="(ios|android|)" /> <item name="userAgent" type="header" pattern="(ios|android|)" /> </params> </rule> <rule name="nameb"> <params> <item name="p" type="get" pattern="(ios|android|)" /> <item name="cid" type="get" pattern="(ios|android|)" /> <item name="type" type="get" pattern="(ios|android|)" /> <item name="sort" type="get" pattern="(ios|android|)" /> <item name="action" type="post" pattern="(ios|android|)" /> <item name="userAgent" type="header" pattern="(ios|android|)" /> </params> </rule> <rule name="namec"> <params> <item name="p" type="get" pattern="(ios|android|)" /> <item name="cid" type="get" pattern="(ios|android|)" /> <item name="type" type="get" pattern="(ios|android|)" /> <item name="sort" type="get" pattern="(ios|android|)" /> <item name="action" type="post" pattern="(ios|android|)" /> <item name="userAgent" type="header" pattern="(ios|android|)" /> </params> </rule> <rule name="named"> <params> <item name="p" type="get" pattern="(ios|android|)" /> <item name="cid" type="get" pattern="(ios|android|)" /> <item name="type" type="get" pattern="(ios|android|)" /> <item name="sort" type="get" pattern="(ios|android|)" /> <item name="action" type="post" pattern="(ios|android|)" /> <item name="userAgent" type="header" pattern="(ios|android|)" /> </params> </rule> </rules> </config>
C#示例代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Serialization; namespace 多層級反序列 { [XmlType(TypeName = "config")] public class XmlConfig { [XmlArray("rules")] public List<rule> rules { get; set; } } [XmlType(TypeName = "rule")] public class rule { [XmlAttribute] public string name { get; set; } [XmlArray("params")] public List<paramsItem> @params { get; set; } } [XmlType(TypeName = "item")] public class paramsItem { [XmlAttribute] public string name { get; set; } [XmlAttribute] public string type { get; set; } [XmlAttribute] public string pattern { get; set; } } class Program { static void Main(string[] args) { /* XmlConfig xml1 = DeserializeFromXml<XmlConfig>("default.xml"); XmlConfig xml = new XmlConfig(); SerializeToXml<XmlConfig>("default.xml", xml); */ XmlConfig xml1 = DeserializeFromXml<XmlConfig>("default.xml"); } /// <summary> /// XML序列化某一類型到指定的文件 /// </summary> /// <param name="filePath"></param> /// <param name="obj"></param> /// <param name="type"></param> public static void SerializeToXml<T>(string filePath, T obj) { try { using (System.IO.StreamWriter writer = new System.IO.StreamWriter(filePath)) { System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T)); xs.Serialize(writer, obj); } } catch (Exception ex) { } } /// <summary> /// 從某一XML文件反序列化到某一類型 /// </summary> /// <param name="filePath">待反序列化的XML文件名稱</param> /// <param name="type">反序列化出的</param> /// <returns></returns> public static T DeserializeFromXml<T>(string filePath) { try { if (!System.IO.File.Exists(filePath)) throw new ArgumentNullException(filePath + " not Exists"); using (System.IO.StreamReader reader = new System.IO.StreamReader(filePath)) { System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T)); T ret = (T)xs.Deserialize(reader); return ret; } } catch (Exception ex) { return default(T); } } } }
PS:這里再為大家提供幾款關(guān)于xml操作的在線工具供大家參考使用:
在線XML/JSON互相轉(zhuǎn)換工具:
http://tools.jb51.net/code/xmljson
在線格式化XML/在線壓縮XML:
http://tools.jb51.net/code/xmlformat
XML在線壓縮/格式化工具:
http://tools.jb51.net/code/xml_format_compress
希望本文所述對大家的C#程序設(shè)計(jì)有所幫助。
- C#復(fù)雜XML反序列化為實(shí)體對象兩種方式小結(jié)
- C# 解析XML和反序列化的示例
- C# 中對象序列化XML的方法
- 詳解 C# 中XML對象的序列化和反序列化
- C#中將xml文件反序列化為實(shí)例時采用基類還是派生類的知識點(diǎn)討論
- C#實(shí)現(xiàn)XML與實(shí)體類之間相互轉(zhuǎn)換的方法(序列化與反序列化)
- C# XML序列化方法及常用特性總結(jié)分析
- C#實(shí)現(xiàn)xml文件反序列化讀入數(shù)據(jù)到object的方法
- C#實(shí)現(xiàn)Xml序列化與反序列化的方法
- C#使用XML序列化操作菜單的方法
- C#實(shí)現(xiàn)對象XML序列化的方法
- c#正反序列化XML文件示例(xml序列化)
- C#序列化成XML注意細(xì)節(jié)
- C#實(shí)現(xiàn)XML序列化與反序列化
相關(guān)文章
C# datagridview、datagrid、GridControl增加行號代碼解析
今天這篇文章小編就來給大家分享關(guān)于C# datagridview、datagrid、GridControl增加行號的介紹,主要包括WinForm中datagridview增加行號、WPF中datagrid增加行號、WPF dev控件GridControl增加行號三個內(nèi)容,感興趣等我小伙伴可以參考一下2021-10-10c#根據(jù)文件大小顯示文件復(fù)制進(jìn)度條實(shí)例
這篇文章主要介紹了c#根據(jù)文件大小顯示文件復(fù)制進(jìn)度條實(shí)例,有需要的朋友可以參考一下2013-12-12c# 使用谷歌身份驗(yàn)證GoogleAuthenticator的示例
這篇文章主要介紹了c# 使用谷歌身份驗(yàn)證GoogleAuthenticator的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2021-01-01C# ManagementObjectSearcher操作window案例詳解
這篇文章主要介紹了C# ManagementObjectSearcher操作window案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08