复杂 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 ...
随机推荐
- H5、CSS3属性的支持性以及flex
一.项目中用到一个flex属性,但是应用了flex的父容器只设置了width,没有设置height,此时每一个应用了上面提到的属性的样式的div都重叠在了一起,在IE10,IE11出问题,IE9没有问 ...
- permutation II (boss出来了)
题目链接:https://leetcode.com/submissions/detail/55876321/ 自己的做法,30个测试用例通过了29例,终究还是有一个系列类型的是无法通过的,因为自己妄想 ...
- 46. Permutations 回溯算法
https://leetcode.com/problems/permutations/ 求数列的所有排列组合.思路很清晰,将后面每一个元素依次同第一个元素交换,然后递归求接下来的(n-1)个元素的全排 ...
- Python 学习---------Day4
第十章 Python语句简介Python的代码书写要求,以及换行等语句可以扩越多行,只要将其封闭在圆括号内,方括号内或大括号内即可,可以使用分号终止.用\可以允许我们跨越多行一个简单的交互式循环whi ...
- SQL 2008无法连接的解决办法
问题: 在从本地客户端连接到SQL 2008的时候出现无法连接的错误.错误信息如下所示:
- NRF24L01--使用STM32F103
看了两天的24l01的相关资料了,一直有点模糊,今天下午感觉有点懂了,在板子上调试成功了,但是还没进行通讯测试.stm32和arduino进行通信还没成功 ,:( 先把stm32的NRF24L01配置 ...
- Linq学习工具及Lamada表达式
好东西.转载一个.以备学习 Linq学习工具: http://www.linqpad.net/ Lamada表达式: Func<int, int, int> IntPow = (x ...
- Firebird数据库的Select语句
select first 10 skip 8 * from t_data //跳过前8行不要,取10行,即取第9行到18行共10行 select first 10 * from t_data ...
- 一个用shell写的统计目录下统计文件行数的代码
此代码是用来回忆当初学的shell脚本,很多知识忘了,写这个花了我三个小时的时间 #!/bin/ksh #count *.c file the num of lineg_csum=0g_hsum=0 ...
- xpath实例 --//span[contains(.,'资讯管理')]
实际例子: 实例一: 不得不说下第一个例子,谢谢selenium论坛的大神门,XPATH还有这种方式的定位,传说是“治疗一切跌打损伤,及text找不到”(Antony群友帮解决的,在此谢谢)