asp.net XML序列化与反序列化

 

1、 创建方法类,引用程序集:using System.Xml.Serialization;

SerializeUtil.cs:

namespace Sjq.Utils

{

    /// <summary>

    /// 对象序列化与反序列化成XML文件

    /// </summary>

    public static class SerializeUtil

    {

        /// <summary>

        /// 把对象序列化成XML文件

        /// </summary>

        /// <param name="obj">需要序列化的对象</param>

        /// <param name="path">XML文件路径</param>

        public static void SerializeXml(object obj, string path)

        {

            File.WriteAllText(path, SerializeStr(obj));

        }

        /// <summary>

        /// 把对象序列化成xml字符串

        /// </summary>

        /// <param name="obj">需要序列化的对象</param>

        public static string SerializeStrNoRoot(object obj)

        {

            var str = Regex.Replace(Regex.Replace(SerializeStr(obj),

                "<\\?xml version=\"1.0\" encoding=\"utf-8\"\\?>\r\n",

                string.Empty),

         " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"",

                string.Empty);

            return str;

        }

        /// <summary>

        /// 把对象序列化成xml字符串

        /// </summary>

        /// <param name="obj">需要序列化的对象</param>

        public static string SerializeStr(object obj)

        {

            XmlSerializer xs = new XmlSerializer(obj.GetType());

            string str = string.Empty;

            using (MemoryStream ms = new MemoryStream())

            {

                System.Xml.XmlTextWriter xtw = new System.Xml.XmlTextWriter(ms, System.Text.Encoding.UTF8);

                xtw.Formatting = System.Xml.Formatting.Indented;

                xs.Serialize(xtw, obj);

                ms.Seek(0, SeekOrigin.Begin);

                using (StreamReader sr = new StreamReader(ms))

                {

                    str = sr.ReadToEnd();

                    xtw.Close();

                    ms.Close();

                }

            }

            return str;

        }

        /// <summary>

        /// 把路径XML文件反序列化成对象

        /// </summary>

        /// <typeparam name="T">反序列化的对象</typeparam>

        /// <param name="xml">XML路径</param>

        /// <returns>反序列化的对象</returns>

        public static T DesrializeXml<T>(string xmlpath)

        {

            T obj = default(T);

            XmlSerializer xs = new XmlSerializer(typeof(T));

            TextReader tr;

            if (!File.Exists(xmlpath))

                tr = new StringReader(xmlpath);

            else

                tr = new StreamReader(xmlpath);

            using (tr)

                obj = (T)xs.Deserialize(tr);

            return obj;

        }

    }

}

2、定义需要XML序列化的实体对象

private List<object> _list = new List<object>();

//_list里面保存了任意的实体对象

object obj=new  object();

_list.Add(obj);

 

3、对对象进行XML序列化:

   //输出XML序列化后的结果

   context.Response.Write(toXml());

   //拼装XML文件

  private string toXml(List<object> _list)

  {

     StringBuilder sb = new StringBuilder();

     sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n");

     foreach (var o in _list)

//调用SerializeUtil.cs类里面的方法

      sb.Append(SerializeUtil.SerializeStrNoRoot(o));

            sb.Append("\r\n</root>");

            return sb.ToString();

       }

posted @ 2013-05-22 17:08  LannyLiu  阅读(293)  评论(0编辑  收藏  举报