C#实现复杂XML的序列化与反序列化
已知.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的序列化与反序列化的更多相关文章
- windows phone8.1:Xml,Json序列化和反序列化
原文:windows phone8.1:Xml,Json序列化和反序列化 小梦本例主要实现以下四点内容: 将Car对象序列化为xml 将Car对象序列化为Json 将xml反序列化为Car对象 将js ...
- xml的序列化与反序列化求一个好用的东西,类似,newtonsoft.net转json的东西。xml里面的结构和数据库不一致..................
xml的序列化与反序列化求一个好用的东西,类似,newtonsoft.net转json的东西.xml里面的结构和数据库不一致..................
- 通过XmlSerializer 实现XML的序列化与反序列化
通过XmlSerializer 我们可以十分简单的将Model与XML进行转换 官文在点这里 帮助类 using System; using System.Text; using System.Xml ...
- XML文件序列化和反序列化的相关内容
问题缘由: XML反序列化出错,XML 文档(2, 2)中有错误,不应有 <configuration xmlns=''> 解决方法: 其实这个是很简单的,因为一般来说都是XML文档书写错 ...
- XML的序列化和反序列化 详细介绍
为什么要做序列化和反序列化? 一个回答: 我们都知道对象是不能在网络中直接传输的,不过还有补救的办法.XML(Extensible Markup Language)可扩展标记语言,本身就被设计用来存储 ...
- XML的序列化与反序列化
开发时会把数据持久化成xml格式,当然可以用xmlwriter来实现,不过感觉不方便,而且很繁琐.推荐使用直接序列化.反序列化对象的方法来处理. 直接上代码: public static class ...
- (转)C# Xml进行序列化与反序列化
---------------------------------------------------------------文章1---------------------------------- ...
- C#XML的序列化与反序列化
要序列化的对象的类: [Serializable]public class Person{private string name;public string Name{get{return name; ...
- C# XML对象序列化、反序列化
XML 序列化:可以将对象序列化为XML文件,或者将XML文件反序列化为对象还有种方法使用LINQ TO XML或者反序列化的方法从XML中读取数据. 最简单的方法就是.net framework提供 ...
随机推荐
- Linux下安装配置virtualenv与virtualenvwrapper
一.Linux下安装.配置virtualenv 配置源 #指定清华源下载pip的包 [root@localhost opt]# pip3 install -i https://pypi.tuna.ts ...
- zepto 选中select option 的值
1,网上搜的,感觉蛮好用的,先存着 $('#sel').find('option').not(function() {return !this.selected;}).val();
- 【分治-前缀积后缀积】JS Window @2018acm徐州邀请赛G
问题 G: JS Window 时间限制: 2 Sec 内存限制: 512 MB 题目描述 JSZKC has an array A of N integers. More over, he has ...
- PHP02
PHP02 1.虚拟主机配置完毕后,机器上的ip和localhost都会默认直接请求第一个虚拟主机 2.解析文本文件显示表格 将文本文件中的数据呈现在一个表格中 1)读取文件内容 包含文本的字符串数据 ...
- pygame 笔记-3 角色动画及背景的使用
上二节,已经知道如何控制基本的运动了,但是只有一个很单调的方块,不太美观,本节学习如何加载背景图,以及角色的动画. 素材准备:(原自github) 角色动画的原理:动画都是一帧帧渲染的,比如向左走的动 ...
- C#异步Task编程模型实战手册
一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的第一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理 ...
- 2-08. 用扑克牌计算24点(25) (ZJU_PAT 数学 枚举)
题目链接:http://pat.zju.edu.cn/contests/ds/2-08 一副扑克牌的每张牌表示一个数(J.Q.K分别表示11.12.13,两个司令都表示6).任取4张牌.即得到4个1~ ...
- python接口自动化测试(三)-requests.post()
上一节介绍了 requests.get() 方法的基本使用,本节介绍 requests.post() 方法的使用: 本文目录: 一.方法定义 二.post方法简单使用 1.带数据的post 2 ...
- linux 杀死进程
列车进程 ps -ef 杀死进程 - 后面是pid kill 1234356
- PL/SQL学习笔记之包
一:包 包是由一组相关的函数,过程,变量,游标等PL/SQL程序设计元素的组合而成的一个PL/SQL程序单元,相当于Java中的类. 包的主要作用是封装:把相同或相似的东西归类,方便维护和管理,提高开 ...