已知.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. redis:set集合类型的操作(无序集合)

    1. set集合类型的操作(无序集合) 集合具有无序性(没有顺序).确定性(描述是确定的).唯一性(没有重复的元素) 1.1. sadd key member [member ...] 语法:sadd ...

  2. js float运算精度问题

    先放个前辈的文章:JavaScript数字精度丢失问题总结 今天遇到了19.99*100的问题,答案不等于1999,因为在javascript中浮点数的计算是以2进制计算的.自己写了一波解决方法(不能 ...

  3. Brendan Gregg ----Linux Performance Tools NEWS

  4. 你真的会打 Log 吗

    前言 工程师在日常开发工作中,更多的编码都是基于现有系统来进行版本迭代.在软件生命周期中,工程维护的比重也往往过半.当我们维护的系统出现问题时,第一时间想到的是查看日志来判断问题原因,这时候日志记录如 ...

  5. 微信小程序判断用户是否需要再次授权获取个人信息

    一.index.js设置如下 //获取用户的授权信息,放到本地缓存中 wx.getSetting({ success: (res) => { if(res.authSetting['scope. ...

  6. grid - 使用相同的名称命名网格线和设置网格项目位置

    1.使用repeat()函数可以给网格线分配相同的名称.这可以节省一定的时间 使用repeat()函数可以给网格线命名,这也导致多个网格线具有相同的网格线名称. 相同网格线名称指定网格线的位置和名称, ...

  7. IDEA创建多个模块MavenSpringBoot项目

    最近在学习springboot,先从创建项目开始,一般项目都是一个项目下会有多个模块,这里先创建一个最简单的实例,一个项目下有一个springboot模块项目提供web服务,引用另一个java项目(相 ...

  8. NOIP2010普及组 三国游戏

    题目OJ地址 http://codevs.cn/problem/1129/ https://www.luogu.org/problemnew/show/P1199 题目描述 Description 小 ...

  9. 最完整苹果IOS个人开发账号升级方法-个人开发账号升级为公司开发者账号常见误区

    1:背景交代 大概晚上10点钟之后在知乎上看到很多人聊审核被拒PLA1.2,主要电商和金融类APP被拒很多.主要原因是 1:发布的APP与改账号关联度很低.(说白苹果怀疑你是山寨APP,不是优质的AP ...

  10. web项目 在visual studio 输出窗口显示调试信息

    //始终显示 Trace.WriteLine(“要显示的调试信息”); //调试时显示 Debug.WriteLine(“要显示的调试信息”);