C#实现序列化对象到XML文档与反序列化

来源:互联网 发布:仓库数据采集器 软件 编辑:程序博客网 时间:2024/05/18 12:03

实现直接把类的一个实例化对象序列化到XML文档以及从xml文档反序列化为类的对象。

一、对象序列化为xml文档

/// <summary>        /// 序列化类到xml文档        /// </summary>        /// <typeparam name="T">类</typeparam>        /// <param name="obj">类的对象</param>        /// <param name="filePath">xml文档路径(包含文件名)</param>        /// <returns>成功:true,失败:false</returns>        private bool CreateXML<T>(T obj,string filePath)        {            XmlWriter writer = null;    //声明一个xml编写器            XmlWriterSettings writerSetting = new XmlWriterSettings //声明编写器设置                {                    Indent=true,//定义xml格式,自动创建新的行                    Encoding= UTF8Encoding.UTF8,//编码格式                };            try            {                //创建一个保存数据到xml文档的流                writer = XmlWriter.Create(filePath, writerSetting);            }            catch (Exception ex)            {                _logServ.Error(string.Format("创建xml文档失败:{0}",ex.Message));                return false;            }            XmlSerializer xser = new XmlSerializer(typeof(T));  //实例化序列化对象            try            {                xser.Serialize(writer, obj);  //序列化对象到xml文档            }            catch (Exception ex)            {                _logServ.Error(string.Format("创建xml文档失败:{0}", ex.Message));                return false;            }            finally            {                writer.Close();            }            return true;        }

二、xml文档反序列化为对象

/// <summary>        /// 从 XML 文档中反序列化为对象        /// </summary>        /// <param name="filePath">文档路径(包含文档名)</param>        /// <param name="type">对象的类型</param>        /// <returns>返回object类型</returns>        public static object FromXmlString(string filePath, Type type)        {            string xmlString = File.ReadAllText(filePath);            if (string.IsNullOrEmpty(xmlString))            {                return null;            }            using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xmlString)))            {                XmlSerializer serializer = new XmlSerializer(type);                try                {                    return serializer.Deserialize(stream);                }                catch                {                    return null;                }            }        }

注:在实例化序列化对象时可以使用单例模式来减少对象的创建,提高性能。

1 0
原创粉丝点击