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();
}
}
}
}
}