c# XML和实体类之间相互转换(序列化和反序列化)
生活随笔
收集整理的這篇文章主要介紹了
c# XML和实体类之间相互转换(序列化和反序列化)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
using?System; using?System.Collections.Generic; using?System.Linq; using?System.Text; using?System.IO; using?System.Data; using?System.Xml; using?System.Xml.Serialization; /// <summary> /// Xml序列化與反序列化 /// </summary> public?class?XmlUtil { ????#region 反序列化 ????/// <summary> ????/// 反序列化 ????/// </summary> ????/// <param name="type">類型</param> ????/// <param name="xml">XML字符串</param> ????/// <returns></returns> ????public?static?object?Deserialize(Type type,?string?xml) ????{ ????????try ????????{ ????????????using?(StringReader sr =?new?StringReader(xml)) ????????????{ ????????????????XmlSerializer xmldes =?new?XmlSerializer(type); ????????????????return?xmldes.Deserialize(sr); ????????????} ????????} ????????catch?(Exception e) ????????{ ????????????return?null; ????????} ????} ????/// <summary> ????/// 反序列化 ????/// </summary> ????/// <param name="type"></param> ????/// <param name="xml"></param> ????/// <returns></returns> ????public?static?object?Deserialize(Type type, Stream stream) ????{ ????????XmlSerializer xmldes =?new?XmlSerializer(type); ????????return?xmldes.Deserialize(stream); ????} ????#endregion ????#region 序列化 ????/// <summary> ????/// 序列化 ????/// </summary> ????/// <param name="type">類型</param> ????/// <param name="obj">對象</param> ????/// <returns></returns> ????public?static?string?Serializer(Type type,?object?obj) ????{ ????????MemoryStream Stream =?new?MemoryStream(); ????????XmlSerializer xml =?new?XmlSerializer(type); ????????try ????????{ ????????????//序列化對象 ????????????xml.Serialize(Stream, obj); ????????} ????????catch?(InvalidOperationException) ????????{ ????????????throw; ????????} ????????Stream.Position = 0; ????????StreamReader sr =?new?StreamReader(Stream); ????????string?str = sr.ReadToEnd(); ????????? ????????sr.Dispose(); ????????Stream.Dispose(); ????????return?str; ????} ????#endregion }
下面是測試代碼:
?
1. 實體對象轉換到Xml
?
| 1 2 3 4 5 6 7 8 9 | public?class?Student { ????public?string?Name {?set;?get; } ????public?int?Age {?set;?get; } } Student stu1 =?new?Student() { Name =?"okbase", Age = 10 }; string?xml = XmlUtil.Serializer(typeof(Student), stu1); Console.Write(xml); |
2.?Xml轉換到實體對象
?
| 1 2 | Student stu2 = XmlUtil.Deserialize(typeof(Student), xml)?as?Student; Console.Write(string.Format("名字:{0},年齡:{1}", stu2.Name, stu2.Age)); |
3.?DataTable轉換到Xml
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // 生成DataTable對象用于測試 DataTable dt1 =?new?DataTable("mytable");???// 必須指明DataTable名稱 dt1.Columns.Add("Dosage",?typeof(int)); dt1.Columns.Add("Drug",?typeof(string)); dt1.Columns.Add("Patient",?typeof(string)); dt1.Columns.Add("Date",?typeof(DateTime)); // 添加行 dt1.Rows.Add(25,?"Indocin",?"David", DateTime.Now); dt1.Rows.Add(50,?"Enebrel",?"Sam", DateTime.Now); dt1.Rows.Add(10,?"Hydralazine",?"Christoff", DateTime.Now); dt1.Rows.Add(21,?"Combivent",?"Janet", DateTime.Now); dt1.Rows.Add(100,?"Dilantin",?"Melanie", DateTime.Now); // 序列化 xml = XmlUtil.Serializer(typeof(DataTable), dt1); Console.Write(xml); |
4.?Xml轉換到DataTable
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | // 反序列化 DataTable dt2 = XmlUtil.Deserialize(typeof(DataTable), xml)?as?DataTable; // 輸出測試結果 foreach?(DataRow dr?in?dt2.Rows) { ????foreach?(DataColumn col?in?dt2.Columns) ????{ ????????Console.Write(dr[col].ToString() +?" "); ????} ????Console.Write("\r\n"); } |
5.?List轉換到Xml
?
| 1 2 3 4 5 6 7 8 | // 生成List對象用于測試 List<Student> list1 =?new?List<Student>(3); list1.Add(new?Student() { Name =?"okbase", Age = 10 }); list1.Add(new?Student() { Name =?"csdn", Age = 15 }); // 序列化 xml = XmlUtil.Serializer(typeof(List<Student>), list1); Console.Write(xml); |
6.?Xml轉換到List
?
| 1 2 3 4 5 | List<Student> list2 = XmlUtil.Deserialize(typeof(List<Student>), xml)?as?List<Student>; foreach?(Student stu?in?list2) { ????Console.WriteLine(stu.Name +?","?+ stu.Age.ToString()); } |
轉載:http://blog.okbase.net/haobao/archive/62.html
本文轉自程序猿博客51CTO博客,原文鏈接http://blog.51cto.com/haihuiwei/1675868如需轉載請自行聯系原作者
365850153
總結
以上是生活随笔為你收集整理的c# XML和实体类之间相互转换(序列化和反序列化)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虚拟化记录--No.1
- 下一篇: 为VMware虚拟主机添加新磁盘