XML序列化和反序列化

public class XmlParseObj
    {
        #region xml和对象的互相转化

        /// <summary>
        /// 将xml格式转换成对象(能返回泛型集合或类) 
        /// </summary>
        /// <typeparam name="T">反序列化对象类型</typeparam>
        /// <param name="xml">反序列化字符串或者==xml文件路径</param>
        /// <returns></returns>
        public static T Desrialize<T>(string xml)
        {
            T obj = default(T);
            XmlSerializer xs = new XmlSerializer(typeof(T));
            TextReader tr;
            if (!System.IO.File.Exists(xml))
            {
                tr = new StringReader(xml);
            }
            else
            {
                tr = new StreamReader(xml);
            }

            using (tr)
            {
                try
                {
                    obj = (T)xs.Deserialize(tr);
                }
                catch (Exception)
                {

                    throw;
                }

            }

            return obj;

        }

        /// <summary>
        /// 将对象转换成xml(参数接受泛型集合或类)
        /// </summary>
        /// <param name="obj">泛型集合或类</param>
        /// <returns>序列化后的字符串</returns>
        public static string Serialize(object obj)
        {

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

            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))
                {

                    string str = sr.ReadToEnd();

                    xtw.Close();

                    ms.Close();

                    return str;

                }

            }

        }


        #endregion
    }

 

posted @ 2013-10-17 14:41  上帝的博客  阅读(241)  评论(0)    收藏  举报