using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Common { /// <summary> /// XML序列化与反序列化 /// </summary> public static class XmlSerializeUtil { private static XmlSerializerNamespaces _namespaces; private static XmlWriterSettings _settings; /// <summary> /// 静态构造函数,应用程序生命周期内只执行一次 /// </summary> static XmlSerializeUtil() { _settings = new XmlWriterSettings { Indent = true, IndentChars = "\t", Encoding = Encoding.UTF8, }; _namespaces = new XmlSerializerNamespaces(); _namespaces.Add("", ""); } /// <summary> /// XML反序列化为对象 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="xml">xml字符串</param> /// <returns>T</returns> public static T Deserialize<T>(string xml) where T : class { using (var sr = new StringReader(xml)) { var serializer = new XmlSerializer(typeof(T)); return serializer.Deserialize(sr) as T; } } /// <summary> /// XML反序列化为对象 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="xml">xml</param> /// <returns>T</returns> public static T Deserialize<T>(Stream xml) where T : class { var serializer = new XmlSerializer(typeof(T)); return serializer.Deserialize(xml) as T; } /// <summary> /// 对象序列化为XML字符串 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="data">数据</param> /// <returns>XML字符串</returns> public static string Serializer<T>(T data) { var serializer = new XmlSerializer(typeof(T)); using (var stream = new MemoryStream()) using (var reader = new StreamReader(stream)) using (var writer = XmlWriter.Create(stream, _settings)) { serializer.Serialize(writer, data, _namespaces); stream.Position = 0; return reader.ReadToEnd(); } } } }