Coding often encounters serialization of multi-level XML, such as the following, assuming the name is "Default. xml", which is in the same folder as program. CS.
<?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>
We can define such an object class
[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; } }
Next we will call the serialization and deserialization methods.
Class program {// deserialize public static t deserializefromxml <t> (string filepath) {try {If (! File. exists (filepath) throw new argumentnullexception (filepath + "nonexistent"); Using (streamreader reader = new streamreader (filepath) {xmlserializer xs = new xmlserializer (typeof (t )); t ret = (t) XS. deserialize (Reader); return ret ;}} catch (exception ex) {return default (t) ;}// serialize public static void serializetoxml <t> (string filepath, t OBJ) {try {using (streamwriter writer = new streamwriter (filepath) {xmlserializer xs = new xmlserializer (typeof (t); Xs. serialize (writer, OBJ) ;}} catch (exception ex) {Throw ex ;}} static void main (string [] ARGs) {// If the relative path here is directly written as "default. XML "is incorrect, because the current file is actually in the bin folder xmlconfig xml = deserializefromxml <xmlconfig> (@".. \.. \ default. XML "); serializetoxml <xmlconfig> (@".. \.. \ test. XML ", XML); console. readkey ();}}
Serialization and deserialization of multi-layer XML