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

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);
}
}
}
}

希望本文所述对大家的C#程序设计有所帮助。

C#实现复杂XML的序列化与反序列化的更多相关文章

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

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

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

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

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

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

  4. XML文件序列化和反序列化的相关内容

    问题缘由: XML反序列化出错,XML 文档(2, 2)中有错误,不应有 <configuration xmlns=''> 解决方法: 其实这个是很简单的,因为一般来说都是XML文档书写错 ...

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

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

  6. XML的序列化与反序列化

    开发时会把数据持久化成xml格式,当然可以用xmlwriter来实现,不过感觉不方便,而且很繁琐.推荐使用直接序列化.反序列化对象的方法来处理. 直接上代码: public static class ...

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

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

  8. C#XML的序列化与反序列化

    要序列化的对象的类: [Serializable]public class Person{private string name;public string Name{get{return name; ...

  9. C# XML对象序列化、反序列化

    XML 序列化:可以将对象序列化为XML文件,或者将XML文件反序列化为对象还有种方法使用LINQ TO XML或者反序列化的方法从XML中读取数据. 最简单的方法就是.net framework提供 ...

随机推荐

  1. 子串 [NOIP2015]

    Description 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个新 ...

  2. Centos--vsftp的配置

    第一次正式接触linux,折腾ftp好几遍,安装第三次终于好了 安装    yum -y vsftpd install     vsftpd:very secure ftp daemon   (dea ...

  3. C#自动识别文件编码

    以下代码源自:http://www.cnblogs.com/stulzq/p/6116627.html /// <summary> /// 用于取得一个文本文件的编码方式(Encoding ...

  4. 小甲鱼Python第十三讲课后题--014字符串

     字符串的方法及注释 capitalize()     把字符串的第一个字符改为大写     casefold()     把整个字符串的所有字符改为小写     center(width)      ...

  5. HTML5 学习06——Geolocation(地理定位)

    HTML5 Geolocation(地理定位) HTML5 Geolocation API 用于获得用户的地理位置. 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的. HTML ...

  6. Mac上安装mysql-mython错误:mysql_config not found

    1.正确安装MySQL 2.配置环境变量 export PATH="$PATH":/usr/local/mysql/bin 3.重启终端再进行安装 pip install mysq ...

  7. Spring中Bean的五个作用域

    当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域.Spring支持如下5种作用域: singleton:单例模式,在整个Spring I ...

  8. delphi button 实现下拉列表

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  9. jquery自带的进度条功能如何使用?

    弹出进度条:先做弹出的功能modal,再做进度条显示.在弹出的界面上增加进度条功能 $.ajax({ xhr: function() { var xhr = new window.XMLHttpReq ...

  10. VUE温习:nextTick、$refs、嵌套路由、keep-alive缓存、is特性、路由属性用法、路由钩子函数

    一.$nextTick 1.vue的dom执行异步更新,只要观察到数据变化,vue将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变. 2.vue.$nextTick(cb),数据发生变化,更新 ...