using System; using System.IO; using System.Text; using System.Xml.Serialization; namespace SKMC.Api.Common.File { /// /// XML序列化与反序列化工具类 /// public class XmlSerializerTool { private static readonly object locker = new object(); public static T Read(string content) where T : class { if (String.IsNullOrEmpty(content)) return default; StringReader stringReader = new StringReader(content); try { XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); return xmlSerializer.Deserialize(stringReader) as T; } finally { if (stringReader != null) stringReader.Close(); } } public static T ReadFrom(string path) where T : class { T local = default; if (!System.IO.File.Exists(path)) { return local; } FileStream fileStream = null; try { fileStream = new FileStream(path, FileMode.Open); XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); return xmlSerializer.Deserialize(fileStream) as T; } finally { if (fileStream != null) fileStream.Close(); } } public static string Save(T obj) where T : class { if (obj == null) return null; MemoryStream memoryStream = null; try { XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); memoryStream = new MemoryStream(); xmlSerializer.Serialize(memoryStream, obj, ns); return UTF8Encoding.UTF8.GetString(memoryStream.ToArray()); } finally { if (memoryStream != null) memoryStream.Close(); } } public static void SaveTo(string path, T obj) { object locker = XmlSerializerTool.locker; lock (locker) { FileStream fileStream = null; try { XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); fileStream = new FileStream(path, FileMode.Create); xmlSerializer.Serialize(fileStream, obj, ns); } finally { if (fileStream != null) fileStream.Close(); } } } } }