c# XML和实体类之间相互转换(序列化和反序列化)

来源:互联网 发布:ecshop3源码下载 编辑:程序博客网 时间:2024/05/19 10:39

 

XML
[csharp] view plaincopy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.IO;  
  6. using System.Data;  
  7. using System.Xml;  
  8. using System.Xml.Serialization;  
  9.    
  10. /// <summary>  
  11. /// Xml序列化与反序列化  
  12. /// </summary>  
  13. public class XmlUtil  
  14. {  
  15.     #region 反序列化  
  16.     /// <summary>  
  17.     /// 反序列化  
  18.     /// </summary>  
  19.     /// <param name="type">类型</param>  
  20.     /// <param name="xml">XML字符串</param>  
  21.     /// <returns></returns>  
  22.     public static object Deserialize(Type type, string xml)  
  23.     {  
  24.         try  
  25.         {  
  26.             using (StringReader sr = new StringReader(xml))  
  27.             {  
  28.                 XmlSerializer xmldes = new XmlSerializer(type);  
  29.                 return xmldes.Deserialize(sr);  
  30.             }  
  31.         }  
  32.         catch (Exception e)  
  33.         {  
  34.    
  35.             return null;  
  36.         }  
  37.     }  
  38.     /// <summary>  
  39.     /// 反序列化  
  40.     /// </summary>  
  41.     /// <param name="type"></param>  
  42.     /// <param name="xml"></param>  
  43.     /// <returns></returns>  
  44.     public static object Deserialize(Type type, Stream stream)  
  45.     {  
  46.         XmlSerializer xmldes = new XmlSerializer(type);  
  47.         return xmldes.Deserialize(stream);  
  48.     }  
  49.     #endregion  
  50.   
  51.     #region 序列化  
  52.     /// <summary>  
  53.     /// 序列化  
  54.     /// </summary>  
  55.     /// <param name="type">类型</param>  
  56.     /// <param name="obj">对象</param>  
  57.     /// <returns></returns>  
  58.     public static string Serializer(Type type, object obj)  
  59.     {  
  60.         MemoryStream Stream = new MemoryStream();  
  61.         XmlSerializer xml = new XmlSerializer(type);  
  62.         try  
  63.         {  
  64.             //序列化对象  
  65.             xml.Serialize(Stream, obj);  
  66.         }  
  67.         catch (InvalidOperationException)  
  68.         {  
  69.             throw;  
  70.         }  
  71.         Stream.Position = 0;  
  72.         StreamReader sr = new StreamReader(Stream);  
  73.         string str = sr.ReadToEnd();  
  74.            
  75.         sr.Dispose();  
  76.         Stream.Dispose();  
  77.    
  78.         return str;  
  79.     }  
  80.   
  81.     #endregion  
  82. }  

下面是测试代码:

 

1. 实体对象转换到Xml

[csharp] view plaincopy
  1. public class Student  
  2. {  
  3.     public string Name { setget; }  
  4.     public int Age { setget; }  
  5. }  
  6.    
  7. Student stu1 = new Student() { Name = "okbase", Age = 10 };  
  8. string xml = XmlUtil.Serializer(typeof(Student), stu1);  
  9. Console.Write(xml);  

2. Xml转换到实体对象
[csharp] view plaincopy
  1. Student stu2 = XmlUtil.Deserialize(typeof(Student), xml) as Student;  
  2. Console.Write(string.Format("名字:{0},年龄:{1}", stu2.Name, stu2.Age));  

3. DataTable转换到Xml
[csharp] view plaincopy
  1. // 生成DataTable对象用于测试  
  2. DataTable dt1 = new DataTable("mytable");   // 必须指明DataTable名称  
  3.    
  4. dt1.Columns.Add("Dosage"typeof(int));  
  5. dt1.Columns.Add("Drug"typeof(string));  
  6. dt1.Columns.Add("Patient"typeof(string));  
  7. dt1.Columns.Add("Date"typeof(DateTime));  
  8.    
  9. // 添加行  
  10. dt1.Rows.Add(25, "Indocin""David", DateTime.Now);  
  11. dt1.Rows.Add(50, "Enebrel""Sam", DateTime.Now);  
  12. dt1.Rows.Add(10, "Hydralazine""Christoff", DateTime.Now);  
  13. dt1.Rows.Add(21, "Combivent""Janet", DateTime.Now);  
  14. dt1.Rows.Add(100, "Dilantin""Melanie", DateTime.Now);  
  15.    
  16. // 序列化  
  17. xml = XmlUtil.Serializer(typeof(DataTable), dt1);  
  18. Console.Write(xml);  

4. Xml转换到DataTable
[csharp] view plaincopy
  1. // 反序列化  
  2. DataTable dt2 = XmlUtil.Deserialize(typeof(DataTable), xml) as DataTable;  
  3.    
  4. // 输出测试结果  
  5. foreach (DataRow dr in dt2.Rows)  
  6. {  
  7.     foreach (DataColumn col in dt2.Columns)  
  8.     {  
  9.         Console.Write(dr[col].ToString() + " ");  
  10.     }  
  11.    
  12.     Console.Write("\r\n");  
  13. }  


5. List转换到Xml
[csharp] view plaincopy
  1. // 生成List对象用于测试  
  2. List<Student> list1 = new List<Student>(3);  
  3.    
  4. list1.Add(new Student() { Name = "okbase", Age = 10 });  
  5. list1.Add(new Student() { Name = "csdn", Age = 15 });  
  6. // 序列化  
  7. xml = XmlUtil.Serializer(typeof(List<Student>), list1);  
  8. Console.Write(xml);  

6. Xml转换到List

[csharp] view plaincopy
  1. List<Student> list2 = XmlUtil.Deserialize(typeof(List<Student>), xml) as List<Student>;  
  2. foreach (Student stu in list2)  
  3. {  
  4.     Console.WriteLine(stu.Name + "," + stu.Age.ToString());  


0 0
原创粉丝点击