复杂 XML 的 序列化 反序列化
已知.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>
Default.XML
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);
}
}
}
}
示例代码
复杂 XML 的 序列化 反序列化的更多相关文章
- php json与xml序列化/反序列化
在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...
- 通过XmlSerializer 实现XML的序列化与反序列化
通过XmlSerializer 我们可以十分简单的将Model与XML进行转换 官文在点这里 帮助类 using System; using System.Text; using System.Xml ...
- XML的序列化和反序列化 详细介绍
为什么要做序列化和反序列化? 一个回答: 我们都知道对象是不能在网络中直接传输的,不过还有补救的办法.XML(Extensible Markup Language)可扩展标记语言,本身就被设计用来存储 ...
- windows phone8.1:Xml,Json序列化和反序列化
原文:windows phone8.1:Xml,Json序列化和反序列化 小梦本例主要实现以下四点内容: 将Car对象序列化为xml 将Car对象序列化为Json 将xml反序列化为Car对象 将js ...
- C# XML序列化/反序列化参考
.NET提供了很不错的XML序列化/反序列化器,(它们所在的命名空间为System.Xml.Serialization)这是很方便的,下面对它的使用做一些总结,以供参考. 1,简单序列化 public ...
- (转)C# Xml进行序列化与反序列化
---------------------------------------------------------------文章1---------------------------------- ...
- C#.net XML的序列化与反序列化
/// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列 ...
- xml的序列化与反序列化求一个好用的东西,类似,newtonsoft.net转json的东西。xml里面的结构和数据库不一致..................
xml的序列化与反序列化求一个好用的东西,类似,newtonsoft.net转json的东西.xml里面的结构和数据库不一致..................
- C# 序列化反序列化XML的帮助类
以下是一个包装的用于序列化反序列化XML和C# 对象的类. public class XmlSerializeHelper<T> { #region Serial ...
随机推荐
- Mysql 分区处理NULL的得方式
MySQL分区处理NULL值得方式 一般情况下,MySQL的分区把NULL当做零值,或者一个最小值进行处理 对于range分区 create table test_null( id int ) par ...
- AppFuse3.5对接oracle数据库
AppFuse是一个使用Java语言开发web应用系统的集成框架.java开发人员最头痛的事情就是面对大量的框架不知该如何选择.这些框架性能如何,兼容性如何等等都需要筛选比较.Appfuse作者Mat ...
- html 页面中显示单行省略号
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- bochs上网及配置
下载并安装bochs2.6:(不能是更高版本) 创建bochs 时注意勾选Dlx linux Demo,但是其文件bochsrc.bxrc中无Ne2k网卡选项,这一段要自己添加,详情见后. 先确定我们 ...
- smartupload 上传与下载(转载)
前台: <form action="uploadimage.jsp" method="post" enctype="multipart/form ...
- 编译器错误信息: CS0433: 类型“ASP.usercontrols_total_ascx”同时存在
“/”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误信息: CS0433: 类型“ASP.use ...
- java覆盖和隐藏
隐藏指的是子类把父类的属性或者方法隐藏了,即将子类强制转换成父类后,调用的还是父类的属性和方法,而覆盖则指的是父类引用指向了子类对象,调用的时候会调用子类的具体方法. (1) 变量只能被隐藏(包括静态 ...
- [转]Git - 重写历史
转自http://git-scm.com/book/zh/Git-%E5%B7%A5%E5%85%B7-%E9%87%8D%E5%86%99%E5%8E%86%E5%8F%B2 重写历史 很多时 ...
- 升级java8---from centos
安装步骤: wget http://10.107.2.44/jdk-8u111-linux-x64.tar.gz root@ute-image:~# tar zxf jdk-8u111-linux-x ...
- yuecheng 笑话
http://115.28.189.219:9898/stock/manager_articles/fundamentals 要闻 http://115.28.189.219:9898/stock/m ...