当前位置:   article > 正文

关于C#读写XML的公用类

关于C#读写XML的公用类

XmlHelper有很多种写法,以泛型的方式保存和读取xml,可以做到像下面这么简化又实用:

调用处 var sysParam = XmlHelper.LoadFromXML<TSysParam>(ApplicationDir.SystemParamFile);

 //无参数文件时,初始化系统参数到XML文件
 XmlHelper.SaveAsXML(ApplicationDir.SystemParamFile, param);

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7. using System.Xml.Serialization;
  8. namespace Infrastructure
  9. {
  10. public static class XmlHelper
  11. {
  12. /// <summary>
  13. /// 读取以xml格式保存的对象,如果文件不存在则自动创建,触发相关代码
  14. /// </summary>
  15. /// <typeparam name="T">类型参数</typeparam>
  16. /// <param name="filename">文件路径</param>
  17. /// <returns></returns>
  18. public static T LoadFromXML<T>(string fileName, Action IfFileNotExist = null)
  19. {
  20. T o = default(T);
  21. try
  22. {
  23. if (!File.Exists(fileName))
  24. {
  25. if (IfFileNotExist != null)
  26. IfFileNotExist.DynamicInvoke(fileName);
  27. SaveAsXML(fileName, Activator.CreateInstance<T>());
  28. }
  29. using (FileStream fs = File.OpenRead(fileName))
  30. {
  31. o = LoadFromXML<T>(fs);
  32. fs.Close();
  33. fs.Dispose();
  34. }
  35. }
  36. catch (Exception e)
  37. {
  38. if (File.Exists(fileName))
  39. {
  40. //const string path = "配置备份";
  41. //if (!Directory.Exists(path))
  42. // Directory.CreateDirectory(path);
  43. File.Copy(fileName,
  44. Path.Combine(Comm.AppDir, DateTime.Now.ToString("yyyy_MM_dd hh_mm_ss") + ".xml"), true);
  45. Comm.InfoMessage($"加载XML异常备份操作, 请查看文件{fileName}");
  46. }
  47. throw new Exception($"加载XML异常: {e.Message}: {e.StackTrace}");
  48. }
  49. return o;
  50. }
  51. /// <summary>
  52. /// 将对象以xml格式保存
  53. /// </summary>
  54. /// <param name="filename">文件路径</param>
  55. /// <param name="o">对象</param>
  56. public static bool SaveAsXML(string fileName, object o)
  57. {
  58. try
  59. {
  60. using (FileStream fs = File.Create(fileName))
  61. {
  62. XmlSerializer sr = new XmlSerializer(o.GetType());
  63. XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
  64. ns.Add(string.Empty, string.Empty); //去除根节点的名空间
  65. sr.Serialize(fs, o, ns);
  66. fs.Close();
  67. }
  68. return true;
  69. }
  70. catch (Exception e)
  71. {
  72. throw new Exception($"保存XML异常: {e.Message} 堆栈信息: {e.StackTrace}");
  73. }
  74. }
  75. private static T LoadFromXML<T>(Stream stream)
  76. {
  77. T o = default(T);
  78. XmlSerializer sr = new XmlSerializer(typeof(T));
  79. o = (T)sr.Deserialize(stream);
  80. return o;
  81. }
  82. }
  83. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/761649
推荐阅读
相关标签
  

闽ICP备14008679号