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提供 ...
随机推荐
- migrate数据库迁移
可先参看博友的博文:https://segmentfault.com/a/1190000005599416 由于Yii migrate 生成的迁移文件默认是存放在 console/migrations ...
- JavaWeb之 JSP:自定义标签的创建和使用
当jsp的内置标签和jstl标签库内的标签都满足不了需求,这时候就需要开发者自定义标签. 下面我们先来开发一个自定义标签,然后再说它的原理吧! 自定义标签的开发步骤 步骤一 编写一个普通的java类, ...
- NLP 工具类库
NLPIR http://www.nlpir.org/ HanLP https://github.com/hankcs Apache OpenNLP https://opennlp.apache. ...
- js中call和apply的作用和用法
call和apply的用途是完全一样的.改变函数中this的指向: 为什么要改变this的指向呢?这个有什么用?有哪些场景呢? 首先this的指向总是在变的,this的指向是由函数执行时所在的环境决定 ...
- hdu 6034 B - Balala Power! 贪心
B - Balala Power! 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6034 题面描述 Talented Mr.Tang has n st ...
- js 事件冒泡、捕获;call()、apply()
他们是描述事件触发时序问题的术语.事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件.相反的,事件冒泡是自下而上的去触发事件.绑定事件方法的第三个参数,就是控制事件触发顺序是 ...
- 深入理解javascript构造函数和原型对象
---恢复内容开始--- 对象,是javascript中非常重要的一个梗,是否能透彻的理解它直接关系到你对整个javascript体系的基础理解,说白了,javascript就是一群对象在搅..(哔! ...
- Tracing Memory access of an oracle process : Intel PinTools
https://mahmoudhatem.wordpress.com/2016/11/07/tracing-memory-access-of-an-oracle-process-intel-pinto ...
- Kubernetes Ingress 学习
Kubernetes 中暴露服务的方式有三种 Loadbalancer 这种方式往往需要云供应商支持,或者本地F5等设备支持 NodePort 这种方式调用方通过NodeIP:NodePort 的方式 ...
- 关于IP,这里有你想知道的一切!
关于IP,这里有你想知道的一切! 原创: 同盾反欺诈研究院 先知安全技术社区 2017-07-13 今日,就来跟大家聊聊关于IP地址方方面面的研究,其实可以归到三个问题上: 1.这个IP在哪儿? 2. ...