XmlSerializerTool.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System;
  2. using System.IO;
  3. using System.Text;
  4. using System.Xml.Serialization;
  5. namespace SKMC.Api.Common.File
  6. {
  7. /// <summary>
  8. /// XML序列化与反序列化工具类
  9. /// </summary>
  10. public class XmlSerializerTool
  11. {
  12. private static readonly object locker = new object();
  13. public static T Read<T>(string content) where T : class
  14. {
  15. if (String.IsNullOrEmpty(content)) return default;
  16. StringReader stringReader = new StringReader(content);
  17. try
  18. {
  19. XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
  20. return xmlSerializer.Deserialize(stringReader) as T;
  21. }
  22. finally
  23. {
  24. if (stringReader != null) stringReader.Close();
  25. }
  26. }
  27. public static T ReadFrom<T>(string path) where T : class
  28. {
  29. T local = default;
  30. if (!System.IO.File.Exists(path))
  31. {
  32. return local;
  33. }
  34. FileStream fileStream = null;
  35. try
  36. {
  37. fileStream = new FileStream(path, FileMode.Open);
  38. XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
  39. return xmlSerializer.Deserialize(fileStream) as T;
  40. }
  41. finally
  42. {
  43. if (fileStream != null) fileStream.Close();
  44. }
  45. }
  46. public static string Save<T>(T obj) where T : class
  47. {
  48. if (obj == null) return null;
  49. MemoryStream memoryStream = null;
  50. try
  51. {
  52. XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
  53. ns.Add("", "");
  54. XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
  55. memoryStream = new MemoryStream();
  56. xmlSerializer.Serialize(memoryStream, obj, ns);
  57. return UTF8Encoding.UTF8.GetString(memoryStream.ToArray());
  58. }
  59. finally
  60. {
  61. if (memoryStream != null) memoryStream.Close();
  62. }
  63. }
  64. public static void SaveTo<T>(string path, T obj)
  65. {
  66. object locker = XmlSerializerTool.locker;
  67. lock (locker)
  68. {
  69. FileStream fileStream = null;
  70. try
  71. {
  72. XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
  73. ns.Add("", "");
  74. XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
  75. fileStream = new FileStream(path, FileMode.Create);
  76. xmlSerializer.Serialize(fileStream, obj, ns);
  77. }
  78. finally
  79. {
  80. if (fileStream != null) fileStream.Close();
  81. }
  82. }
  83. }
  84. }
  85. }