ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ArcObject对象序列化和反序列化

2020-05-02 20:52:54  阅读:343  来源: 互联网

标签:序列化 obj 对象 接口 serStr ArcObject xmlSerializer null


因为AO对象不支持跨线程,所以当开发多线程应用时,需要将AO对象序列化为字符串(本文只介绍序列化为字符串的情形),然后将序列化字符串传递给工作线程,最后在工作线程里将序列化字符串反序列化为AO对象执行相关操作。

AO对象按序列化方式可分为两种:

1、实现IXMLSerialize接口的类(此处为IXMLSerialize而不是IXMLSerializer)

2、实现IPersistStream接口的类

1、实现IXMLSerialize接口的类的序列化和反序列化

        /// <summary>
        /// 实现IXMLSerialize接口的类的序列化
        /// </summary>
        /// <param name="obj">要序列化的对象</param>
        /// <returns>序列化后的字符串</returns>
        private string SerialzedXMLSer(object obj)
        {
            string serStr = null;
            try
            {
                //此处为IXMLSerializer不是IXMLSerialize(有r)
                IXMLSerializer xmlSerializer = new XMLSerializerClass();
                serStr = xmlSerializer.SaveToString(obj, null, null);            
            }
            catch { }
            return serStr;
        }

        /// <summary>
        /// 实现IXMLSerialize接口的类的反序列化
        /// </summary>
        /// <param name="serStr">序列化字符串</param>
        /// <returns>反序列化得到的对象</returns>
        private object DeSerialzedXMLSer(string serStr)
        {
            object obj = null;
            try
            {
                ///反序列化
                IXMLSerializer xmlSerializer = new XMLSerializerClass();
                obj = xmlSerializer.LoadFromString(serStr, null, null);
            }
            catch { }
            return obj;
        }

2、实现IPersistStream接口的类的序列化和反序列化

  此种序列化和反序列化方式多用到IXMLPersistedObject接口

        /// <summary>
        /// 序列化实现IPersistStream接口的对象
        /// </summary>
        /// <param name="obj">要序列化的对象</param>
        /// <returns>序列化后的字符串</returns>
        private string SerialzedPersist(object obj)
        {
            string serStr = null;
            try
            {
                //序列化
                IXMLPersistedObject xmlWrapper = new XMLPersistedObjectClass();
                xmlWrapper.Object = obj;
                IXMLSerializer xmlSerializer = new XMLSerializerClass();
                serStr = xmlSerializer.SaveToString(xmlWrapper, null, null);
            }
            catch { }
            return serStr;
        }

        /// <summary>
        /// 反序列化实现IPersistStream接口的对象
        /// </summary>
        /// <param name="serStr">序列化字符串</param>
        /// <returns>反序列化得到的对象</returns>
        private object DeSerialzedPersist(string serStr)
        {
            object obj = null;
            try
            {
                ///反序列化
                IXMLSerializer xmlSerializer = new XMLSerializerClass();
                IXMLPersistedObject deWrapper = xmlSerializer.LoadFromString(serStr, null, null) as IXMLPersistedObject;
                obj = deWrapper.Object;
            }
            catch { }
            return obj;
        }

 

标签:序列化,obj,对象,接口,serStr,ArcObject,xmlSerializer,null
来源: https://www.cnblogs.com/songqingguo/p/12819468.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有