List实体类、DataTable与xml互转

冷不防 2023-06-05 11:12 88阅读 0赞
  1. 序列化常用Attribute讲解说明
  2. [XmlRootAttribute("MyCity", Namespace="abc.abc", IsNullable=false)] // 当该类为Xml根节点时,以此为根节点名称。
  3. public class City
  4. [XmlAttribute("AreaName")] // 表现为Xml节点属性。<... AreaName="..."/>
  5. public string Name
  6. [XmlElementAttribute("AreaId", IsNullable = false)] // 表现为Xml节点。<AreaId>...</AreaId>
  7. public string Id
  8. [XmlArrayAttribute("Areas")] // 表现为Xml层次结构,根为Areas,其所属的每个该集合节点元素名为类名。<Areas><Area ... /><Area ... /></Areas>
  9. public Area[] Areas
  10. [XmlElementAttribute("Area", IsNullable = false)] // 表现为水平结构的Xml节点。<Area ... /><Area ... />...
  11. public Area[] Areas
  12. [XmlIgnoreAttribute] // 忽略该元素的序列化。

参考

一、建立/XML序列化公共处理类

  1. /// <summary>
  2. /// XML序列化公共处理类
  3. /// </summary>
  4. public static class XmlSerializeHelper
  5. {
  6. /// <summary>
  7. /// 将实体对象转换成XML
  8. /// </summary>
  9. /// <typeparam name="T">实体类型</typeparam>
  10. /// <param name="obj">实体对象</param>
  11. public static string XmlSerialize<T>(T obj)
  12. {
  13. try
  14. {
  15. using (StringWriter sw = new StringWriter())
  16. {
  17. Type t = obj.GetType();
  18. XmlSerializer serializer = new XmlSerializer(obj.GetType());
  19. serializer.Serialize(sw, obj);
  20. sw.Close();
  21. return sw.ToString();
  22. }
  23. }
  24. catch (Exception ex)
  25. {
  26. throw new Exception("将实体对象转换成XML异常", ex);
  27. }
  28. }
  29. /// <summary>
  30. /// 将XML转换成实体对象
  31. /// </summary>
  32. /// <typeparam name="T">实体类型</typeparam>
  33. /// <param name="strXML">XML</param>
  34. public static T DESerializer<T>(string strXML) where T : class
  35. {
  36. try
  37. {
  38. using (StringReader sr = new StringReader(strXML))
  39. {
  40. XmlSerializer serializer = new XmlSerializer(typeof(T));
  41. return serializer.Deserialize(sr) as T;
  42. }
  43. }
  44. catch (Exception ex)
  45. {
  46. throw new Exception("将XML转换成实体对象异常", ex);
  47. }
  48. }
  49. }

二、List实体互转调用事例

  1. static void Main(string[] args)
  2. {
  3. #region 测试数据
  4. List<UserInfo> userList = new List<UserInfo>();
  5. userList.Add(new UserInfo() { ID = 1, Name = "张三", CreateTime = DateTime.Now });
  6. userList.Add(new UserInfo() { ID = 2, Name = "李四", CreateTime = DateTime.Now });
  7. userList.Add(new UserInfo() { ID = 2, Name = "王五" });
  8. #endregion
  9. //将实体对象转换成XML
  10. string xmlResult = XmlSerializeHelper.XmlSerialize(userList);
  11. //将XML转换成实体对象
  12. List<UserInfo> deResult = XmlSerializeHelper.DESerializer<List<UserInfo>>(xmlResult);
  13. }
  14. /// <summary>
  15. /// 用户信息类
  16. /// </summary>
  17. public class UserInfo
  18. {
  19. /// <summary>
  20. /// 编号
  21. /// </summary>
  22. public int ID { get; set; }
  23. /// <summary>
  24. /// 名称
  25. /// </summary>
  26. public string Name { get; set; }
  27. /// <summary>
  28. /// 创建时间
  29. /// </summary>
  30. public DateTime? CreateTime { get; set; }
  31. }

三、DataTable互转调用事列

  1. static void Main(string[] args)
  2. {
  3. #region 测试数据
  4. //创建DataTable
  5. DataTable dt = new DataTable("NewDt");
  6. //创建自增长的ID列
  7. DataColumn dc = dt.Columns.Add("ID", Type.GetType("System.Int32"));
  8. dt.Columns.Add(new DataColumn("Name", Type.GetType("System.String")));
  9. dt.Columns.Add(new DataColumn("CreateTime", Type.GetType("System.DateTime")));
  10. //创建数据
  11. DataRow dr = dt.NewRow();
  12. dr["ID"] = 1;
  13. dr["Name"] = "张三";
  14. dr["CreateTime"] = DateTime.Now;
  15. dt.Rows.Add(dr);
  16. dr = dt.NewRow();
  17. dr["ID"] = 2;
  18. dr["Name"] = "李四";
  19. dr["CreateTime"] = DateTime.Now;
  20. dt.Rows.Add(dr);
  21. dr = dt.NewRow();
  22. dr["ID"] = 3;
  23. dr["Name"] = "王五";
  24. dr["CreateTime"] = DateTime.Now;
  25. dt.Rows.Add(dr);
  26. #endregion
  27. //将DataTable转换成XML
  28. string xmlResult = XmlSerializeHelper.XmlSerialize(dt);
  29. //将XML转换成DataTable
  30. DataTable deResult = XmlSerializeHelper.DESerializer<DataTable>(xmlResult);
  31. }

转载于:https://www.cnblogs.com/macT/p/11395711.html

发表评论

表情:
评论列表 (有 0 条评论,88人围观)

还没有评论,来说两句吧...

相关阅读