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

本文以一个实例的形式讲述了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的序列化与反序列化 的全部内容, 来源链接: utcz.com/z/345165.html

回到顶部