因爲在.net core中去除了Xml序列化XmlSerializer操做類。所以,在於一此數據傳輸當中出,須要用到對xml格式字符串的處理問題。所以封裝了一個xml序列化與反序列化操做的類庫。git
主要類爲:XmlSerializer<T>,其中主要方法:github
1 /// <summary> 2 /// 序列化報文爲xml 3 /// </summary> 4 /// <param name="packet"></param> 5 /// <returns></returns> 6 public string ToXml(T packet) 7 { 8 StringBuilder sb = new StringBuilder(); 9 if (!string.IsNullOrEmpty(_xmlHead)) 10 { 11 sb.AppendFormat("{0}\r\n", _xmlHead); 12 } 13 try 14 { 15 Visit(sb, packet); 16 } 17 catch (Exception ex) 18 { 19 throw new XmlSerializerException($"序列化對象異常:{ex.Message}", ex); 20 } 21 return sb.ToString(); 22 }
1 /// <summary> 2 /// 序列化爲報文內容 3 /// </summary> 4 /// <param name="xml">以<packet>標籤開始的xml內容</param> 5 /// <returns></returns> 6 public T FromXml(string xml) 7 { 8 int index; 9 if (xml.Trim().StartsWith("<?xml") && (index = xml.IndexOf("?>")) != -1) 10 { 11 xml = xml.Substring(index + 2).Trim('\r', '\n', ' '); 12 } 13 try 14 { 15 switch (_elemType) 16 { 17 case ElementType.Generic: 18 return VisitXmlGeneric(xml); 19 case ElementType.Array: 20 return VisitXmlArray(xml); 21 default: 22 return VisitXmlObject(xml); 23 } 24 } 25 catch (Exception ex) 26 { 27 throw new XmlSerializerException($"反序列化對象信息異常:{ex.Message}", ex); 28 } 29 }
1 // CreatedBy: Jackie Lee(天宇遊龍) 2 // CreatedOn: 2017-04-13 3 // 博客:http://www.cnblogs.com/dralee 4 /// <summary> 5 /// 測試類 6 /// </summary> 7 public class PersonTest 8 { 9 public void Test() 10 { 11 Person p1 = new Person 12 { 13 Id = 1, 14 Name = "Jackie", 15 Gender = Gender.Male, 16 Phone = "18412345678", 17 Address = new Address { Province = "廣東", City = "深圳", Detail = "xx區xx街道xxxx號" } 18 }; 19 Person p2 = new Person 20 { 21 Id = 2, 22 Name = "Hony", 23 Gender = Gender.Female, 24 Phone = "13512345678", 25 Address = new Address { Province = "廣東", City = "深圳", Detail = "yy區yy街道yyyy號" } 26 }; 27 28 XmlSerializer<Person> xs = new XmlSerializer<Person>("<?xml version=\"1.0\" encoding=\"utf - 8\"?>"); 29 var xml1 = xs.ToXml(p1); 30 OutPrint("對象序列化", xml1); 31 var xml2 = xs.ToXml(p2); 32 OutPrint("xml反序列化", xml2); 33 34 Console.WriteLine("\r\n============= 數組對象 ==============="); 35 36 var pArr = new Person[] { p1, p2 }; 37 XmlSerializer<Person[]> xsArr = new XmlSerializer<Person[]>(""); 38 var xml4 = xsArr.ToXml(pArr); 39 OutPrint("數組對象序列化", xml4); 40 41 var pArr2 = xsArr.FromXml(xml4); 42 Console.WriteLine("============= 數組對象反序列化 ==============="); 43 pArr2.ToList().ForEach(p => 44 { 45 OutPrint("數組對象", p.ToString()); 46 }); 47 48 Console.WriteLine("\r\n============= 泛型集合對象 ==============="); 49 var ps = new List<Person> { p1, p2 }; 50 XmlSerializer<List<Person>> xsList = new XmlSerializer<List<Person>>(""); 51 var xml3 = xsList.ToXml(ps); 52 OutPrint("泛型集合對象序列化", xml3); 53 54 var ps2 = xsList.FromXml(xml3); 55 Console.WriteLine("============= 泛型集合對象反序列化 ==============="); 56 ps2.ForEach(p => 57 { 58 OutPrint("泛型集合對象", p.ToString()); 59 }); 60 } 61 62 private void OutPrint(string tip, string msg) 63 { 64 Console.WriteLine("======>{0}:", tip); 65 Console.WriteLine(msg); 66 } 67 }
類庫文件: FD.Generic.Xml.zip數組
項目源代碼已上傳github,點擊查看源碼:https://github.com/dralee/FDGenericXml測試
應SamYau2014反映,已添加對CDATA值的支持,源碼見githubui
新版本效果:spa