已知.xml(再此命名default.xml)文件,请将其反序列化到一个实例对象。

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <config>
  3. <rules>
  4. <rule name="namea">
  5. <params>
  6. <item name="p" type="get" pattern="(ios|android|)" />
  7. <item name="cid" type="get" pattern="(ios|android|)" />
  8. <item name="type" type="get" pattern="(ios|android|)" />
  9. <item name="sort" type="get" pattern="(ios|android|)" />
  10. <item name="action" type="post" pattern="(ios|android|)" />
  11. <item name="userAgent" type="header" pattern="(ios|android|)" />
  12. </params>
  13. </rule>
  14.  
  15. <rule name="nameb">
  16. <params>
  17. <item name="p" type="get" pattern="(ios|android|)" />
  18. <item name="cid" type="get" pattern="(ios|android|)" />
  19. <item name="type" type="get" pattern="(ios|android|)" />
  20. <item name="sort" type="get" pattern="(ios|android|)" />
  21. <item name="action" type="post" pattern="(ios|android|)" />
  22. <item name="userAgent" type="header" pattern="(ios|android|)" />
  23. </params>
  24. </rule>
  25.  
  26. <rule name="namec">
  27. <params>
  28. <item name="p" type="get" pattern="(ios|android|)" />
  29. <item name="cid" type="get" pattern="(ios|android|)" />
  30. <item name="type" type="get" pattern="(ios|android|)" />
  31. <item name="sort" type="get" pattern="(ios|android|)" />
  32. <item name="action" type="post" pattern="(ios|android|)" />
  33. <item name="userAgent" type="header" pattern="(ios|android|)" />
  34. </params>
  35. </rule>
  36.  
  37. <rule name="named">
  38. <params>
  39. <item name="p" type="get" pattern="(ios|android|)" />
  40. <item name="cid" type="get" pattern="(ios|android|)" />
  41. <item name="type" type="get" pattern="(ios|android|)" />
  42. <item name="sort" type="get" pattern="(ios|android|)" />
  43. <item name="action" type="post" pattern="(ios|android|)" />
  44. <item name="userAgent" type="header" pattern="(ios|android|)" />
  45. </params>
  46. </rule>
  47. </rules>
  48. </config>

Default.XML


C#示例代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Xml.Serialization;
  6.  
  7. namespace 多层级反序列
  8. {
  9. [XmlType(TypeName = "config")]
  10. public class XmlConfig
  11. {
  12. [XmlArray("rules")]
  13. public List<rule> rules { get; set; }
  14. }
  15.  
  16. [XmlType(TypeName = "rule")]
  17. public class rule
  18. {
  19. [XmlAttribute]
  20. public string name { get; set; }
  21.  
  22. [XmlArray("params")]
  23. public List<paramsItem> @params { get; set; }
  24. }
  25.  
  26. [XmlType(TypeName = "item")]
  27. public class paramsItem
  28. {
  29. [XmlAttribute]
  30. public string name { get; set; }
  31. [XmlAttribute]
  32. public string type { get; set; }
  33. [XmlAttribute]
  34. public string pattern { get; set; }
  35. }
  36.  
  37. class Program
  38. {
  39. static void Main(string[] args)
  40. {
  41. /*
  42. XmlConfig xml1 = DeserializeFromXml<XmlConfig>("default.xml");
  43. XmlConfig xml = new XmlConfig();
  44. SerializeToXml<XmlConfig>("default.xml", xml);
  45. */
  46.  
  47. XmlConfig xml1 = DeserializeFromXml<XmlConfig>("default.xml");
  48.  
  49. }
  50.  
  51. /// <summary>
  52. /// XML序列化某一类型到指定的文件
  53. /// </summary>
  54. /// <param name="filePath"></param>
  55. /// <param name="obj"></param>
  56. /// <param name="type"></param>
  57. public static void SerializeToXml<T>(string filePath, T obj)
  58. {
  59. try
  60. {
  61. using (System.IO.StreamWriter writer = new System.IO.StreamWriter(filePath))
  62. {
  63. System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
  64. xs.Serialize(writer, obj);
  65. }
  66. }
  67. catch (Exception ex)
  68. {
  69. }
  70. }
  71. /// <summary>
  72. /// 从某一XML文件反序列化到某一类型
  73. /// </summary>
  74. /// <param name="filePath">待反序列化的XML文件名称</param>
  75. /// <param name="type">反序列化出的</param>
  76. /// <returns></returns>
  77. public static T DeserializeFromXml<T>(string filePath)
  78. {
  79. try
  80. {
  81. if (!System.IO.File.Exists(filePath))
  82. throw new ArgumentNullException(filePath + " not Exists");
  83.  
  84. using (System.IO.StreamReader reader = new System.IO.StreamReader(filePath))
  85. {
  86. System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
  87. T ret = (T)xs.Deserialize(reader);
  88. return ret;
  89. }
  90. }
  91. catch (Exception ex)
  92. {
  93. return default(T);
  94. }
  95. }
  96. }
  97. }

示例代码

复杂 XML 的 序列化 反序列化的更多相关文章

  1. php json与xml序列化/反序列化

    在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...

  2. 通过XmlSerializer 实现XML的序列化与反序列化

    通过XmlSerializer 我们可以十分简单的将Model与XML进行转换 官文在点这里 帮助类 using System; using System.Text; using System.Xml ...

  3. XML的序列化和反序列化 详细介绍

    为什么要做序列化和反序列化? 一个回答: 我们都知道对象是不能在网络中直接传输的,不过还有补救的办法.XML(Extensible Markup Language)可扩展标记语言,本身就被设计用来存储 ...

  4. windows phone8.1:Xml,Json序列化和反序列化

    原文:windows phone8.1:Xml,Json序列化和反序列化 小梦本例主要实现以下四点内容: 将Car对象序列化为xml 将Car对象序列化为Json 将xml反序列化为Car对象 将js ...

  5. C# XML序列化/反序列化参考

    .NET提供了很不错的XML序列化/反序列化器,(它们所在的命名空间为System.Xml.Serialization)这是很方便的,下面对它的使用做一些总结,以供参考. 1,简单序列化 public ...

  6. (转)C# Xml进行序列化与反序列化

    ---------------------------------------------------------------文章1---------------------------------- ...

  7. C#.net XML的序列化与反序列化

    /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列 ...

  8. xml的序列化与反序列化求一个好用的东西,类似,newtonsoft.net转json的东西。xml里面的结构和数据库不一致..................

    xml的序列化与反序列化求一个好用的东西,类似,newtonsoft.net转json的东西.xml里面的结构和数据库不一致..................

  9. C# 序列化反序列化XML的帮助类

    以下是一个包装的用于序列化反序列化XML和C# 对象的类.  public class XmlSerializeHelper<T>     {         #region Serial ...

随机推荐

  1. Android上dip、dp、px、sp等单位说明(转)

    dip  device independent pixels(设备独立像素). 不同设备不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素. 在 ...

  2. Combination Sum II Combinations

    https://leetcode.com/problems/combination-sum-ii/ 题目跟前面几道题很类似,直接写代码: class Solution { public: vector ...

  3. 算法入门笔记------------Day4

    1.WERTYU 输入一个错位后敲出的字符串,输出打字员本来想打出的字 #include<stdio.h> char *s="`1234567890-=QWERTYUIOP[]\ ...

  4. C# GetHashCode与Equals在HashTable表查找时的关系

    using System; using System.Collections.Generic; using System.Text; using Microsoft.Win32; using Syst ...

  5. 转发!HTML 复选框 checkbox 的 JavaScript 的全选和全反选

    checkbox 或者按钮实现 form 内的 checkbox 全选或者反选,代码很简单,全部代码如下: <html> <head> <meta http-equiv= ...

  6. 一步一步安装hive

    安装hive 1.下载hive-0.11.0.tar.gz,解压; 2.下载mysql-connector-java-5.1.29-bin.jar并放到hive/lib/下: 3.配置hive/con ...

  7. mySQL中删除unique key的语法

    CREATE TABLE `good_booked` (  `auto_id` int(10) NOT NULL auto_increment,  `good_id` int(11) default ...

  8. 关于HashTable的遍历方法解析

    要遍历一个Hashtable,api中提供了如下几个方法可供我们遍历: keys() - returns an Enumeration of the keys of this Hashtable ke ...

  9. Silverlight5中横向显示ListBox

    备忘 <ListBox x:Name="Cpbrow" HorizontalAlignment="Left" Height="153" ...

  10. SELECT TOP 100 PERCENT 不按后面的order by 排序

    项目中,由于需要把3个状态的任务合并显示,并且按照任务由近及远的顺序排序,类似于下面的语句 order by taskid desc )m union all order by taskid desc ...