欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-16 12:34:49
...

实现直接把类的一个实例化对象序列化到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;
                }
            }

        }

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