复杂 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 ...
随机推荐
- Android上dip、dp、px、sp等单位说明(转)
dip device independent pixels(设备独立像素). 不同设备不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素. 在 ...
- Combination Sum II Combinations
https://leetcode.com/problems/combination-sum-ii/ 题目跟前面几道题很类似,直接写代码: class Solution { public: vector ...
- 算法入门笔记------------Day4
1.WERTYU 输入一个错位后敲出的字符串,输出打字员本来想打出的字 #include<stdio.h> char *s="`1234567890-=QWERTYUIOP[]\ ...
- C# GetHashCode与Equals在HashTable表查找时的关系
using System; using System.Collections.Generic; using System.Text; using Microsoft.Win32; using Syst ...
- 转发!HTML 复选框 checkbox 的 JavaScript 的全选和全反选
checkbox 或者按钮实现 form 内的 checkbox 全选或者反选,代码很简单,全部代码如下: <html> <head> <meta http-equiv= ...
- 一步一步安装hive
安装hive 1.下载hive-0.11.0.tar.gz,解压; 2.下载mysql-connector-java-5.1.29-bin.jar并放到hive/lib/下: 3.配置hive/con ...
- mySQL中删除unique key的语法
CREATE TABLE `good_booked` ( `auto_id` int(10) NOT NULL auto_increment, `good_id` int(11) default ...
- 关于HashTable的遍历方法解析
要遍历一个Hashtable,api中提供了如下几个方法可供我们遍历: keys() - returns an Enumeration of the keys of this Hashtable ke ...
- Silverlight5中横向显示ListBox
备忘 <ListBox x:Name="Cpbrow" HorizontalAlignment="Left" Height="153" ...
- SELECT TOP 100 PERCENT 不按后面的order by 排序
项目中,由于需要把3个状态的任务合并显示,并且按照任务由近及远的顺序排序,类似于下面的语句 order by taskid desc )m union all order by taskid desc ...