文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>关于在C#中,将XML源文件序列化和反序列化的问题

关于在C#中,将XML源文件序列化和反序列化的问题

时间:2010-11-02  来源:kuibono

但是,这种数据的存数方式也会产生一些问题。

    我们设置和修改系统参数通常都是在系统的后台操作,但是由于业务需要,经常会出现系统的后台和前台不再同一个网站目录中甚至不在同一台服务器上。这样,系统的 前台或者其他部分根本无法调用后台系统参数设置的xml文件。

    所以,可以考虑将序列化过的XML文件保存在数据库中。

 

    .NET中内置序列化和反序列化的方法。不知道的可以自己看一下MSDN。

    这些方法的缺点是只提供将实体类序列化为物理文件和将物理文件序列化为实体,这就造成了一个很严重的问题,如果我们要将XML文件保存到数据库,就要再进行一个文件的读取操作。严重影响了程序性能,增加服务器负载。

 

    最近在研究Discuz NT!代码的时候,竟然发现Discuz底层中存在这两个方法:

        /// <summary>
        /// 实体序列化成XML源文件
        /// </summary>
        /// <param name="obj">对象</param>
        /// <returns>xml源文件字符串</returns>
        public static string Serialize(object obj)
        {
            string returnStr = "";
            XmlSerializer serializer = GetSerializer(obj.GetType());
            MemoryStream ms = new MemoryStream();
            XmlTextWriter xtw = null;
            StreamReader sr = null;
            try
            {
                xtw = new System.Xml.XmlTextWriter(ms, Encoding.UTF8);
                xtw.Formatting = System.Xml.Formatting.Indented;
                serializer.Serialize(xtw, obj);
                ms.Seek(0, SeekOrigin.Begin);
                sr = new StreamReader(ms);
                returnStr = sr.ReadToEnd();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (xtw != null)
                    xtw.Close();
                if (sr != null)
                    sr.Close();
                ms.Close();
            }
            return returnStr;

        }

        /// <summary>
        /// XML源文件反序列化成实体
        /// </summary>
        /// <param name="type">实体类型</param>
        /// <param name="s">XML源文件</param>
        /// <returns></returns>
        public static object DeSerialize(Type type, string s)
        {
            byte[] b = System.Text.Encoding.UTF8.GetBytes(s);
            try
            {
                XmlSerializer serializer = GetSerializer(type);
                return serializer.Deserialize(new MemoryStream(b));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

 

 仅供参考。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载