首页 > 其他 > 详细

ArcObject对象序列化和反序列化

时间:2020-05-02 21:34:18      阅读:59      评论:0      收藏:0      [点我收藏+]

因为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;
        }

 

ArcObject对象序列化和反序列化

原文:https://www.cnblogs.com/songqingguo/p/12819468.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!