zoukankan      html  css  js  c++  java
  • ArcObject对象序列化和反序列化

    因为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;
            }
  • 相关阅读:
    【转载】数据结构与算法设计
    【转载】简述Linux的启动过程
    【转载】20分钟MySQL基础入门
    【转载】linux内核笔记之进程地址空间
    【转载】linux内核笔记之高端内存映射
    Logical Address->Linear Address->Physical Address
    【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
    【转载】不会编程也能写爬虫?可视化爬虫工具是什么东东
    【转载】我是一个键盘
    80. Remove Duplicates from Sorted Array II
  • 原文地址:https://www.cnblogs.com/songqingguo/p/12819468.html
Copyright © 2011-2022 走看看