C#完成龐雜XML的序列化與反序列化。本站提示廣大學習愛好者:(C#完成龐雜XML的序列化與反序列化)文章只能為提供參考,不一定能成為您想要的結果。以下是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);
}
}
}
}
願望本文所述對年夜家的C#法式設計有所贊助。