C#实现复杂XML的序列化与反序列化

作者:shichen2014 时间:2023-12-19 05:09:45 

本文以一个实例的形式讲述了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);
  }
 }
}
}

PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:

在线XML/JSON互相转换工具:
http://tools.jb51.net/code/xmljson

在线格式化XML/在线压缩XML:
http://tools.jb51.net/code/xmlformat

XML在线压缩/格式化工具:
http://tools.jb51.net/code/xml_format_compress

希望本文所述对大家的C#程序设计有所帮助。

标签:C#,XML,序列化
0
投稿

猜你喜欢

  • C#设计模式之策略模式

    2023-08-08 21:00:11
  • java如何导出insert语句并生成sql脚本

    2022-05-18 10:33:54
  • Android table布局开发实现简单计算器

    2021-07-15 13:05:28
  • java ThreadGroup的作用及方法详解

    2022-02-03 16:49:01
  • SpringCloud高可用配置中心Config详解

    2023-11-17 11:25:00
  • java 读取本地文件实例详解

    2023-08-12 20:41:32
  • Java集合之Comparable和Comparator接口详解

    2022-10-04 06:03:44
  • C#策略模式(Strategy Pattern)实例教程

    2022-11-29 07:35:07
  • bs架构和cs架构的区别_动力节点Java学院整理

    2021-09-18 22:06:18
  • mybatis-plus的批量新增/批量更新以及问题

    2022-10-28 04:44:16
  • Java程序顺序结构中逻辑控制语句详解流程

    2023-06-10 17:54:08
  • Android轻松实现多语言的方法示例

    2023-02-17 19:33:38
  • 深入浅出讲解Java集合之Map接口

    2023-10-14 20:52:46
  • UnityUI中绘制线状统计图

    2022-12-03 14:30:43
  • Android利用Intent.ACTION_SEND进行分享

    2023-07-10 05:02:18
  • Android 通过代码安装 APK的方法详解

    2022-11-12 14:37:26
  • Android抓取CSDN首页极客头条内容完整实例

    2023-06-09 17:01:16
  • SpringBoot集成Redis的实现示例

    2022-10-22 14:50:33
  • Android编程之TextView的字符过滤功能分析

    2023-05-19 20:23:36
  • Eclipse安装Aptana插件(注意对应版本问题)

    2022-05-26 17:17:55
  • asp之家 软件编程 m.aspxhome.com