• ArcEngine 序列化AO对象


    ArcEngine中只要是继承了IPersistStream接口的对象均可调用ArcEngine中的类库进行序列化和反序列化。一般我们会序列化成xml格式,作为字符串存储,需要的时候,反序列化为对象。但实际使用的时候,发现序列化出来的xml有乱码,反序列化的时候也会报错。看了下相关接口,也没找到设置文字编码的地方。

    最后想着不如序列化成byte[],然后把byte[]保存成字符串存储,反序列化的时候,从字符串先转换成byte[],再进行反序列化。实际测试验证,这种方式是可行的。

    具体代码如下。

    /// <summary>
    /// 保存成bytes字符串
    /// </summary>
    /// <param name="pPersistStream"></param>
    /// <returns></returns>
    public static string ToBytesString(IPersistStream pPersistStream)
    {
        IMemoryBlobStream myMemoryBlobStream = new MemoryBlobStreamClass();
        pPersistStream.Save(myMemoryBlobStream, 0);
        IMemoryBlobStreamVariant myMemoryBlobStreamVariant = myMemoryBlobStream as IMemoryBlobStreamVariant;
        object myObject;
        myMemoryBlobStreamVariant.ExportToVariant(out myObject);
        return Convert.ToBase64String(myObject as byte[]);
    }
    
    /// <summary>
    /// 从bytes字符串中解析对象信息
    /// </summary>
    /// <param name="pBytesString"></param>
    /// <param name="pPersistStream"></param>
    public static void FromBytesString(string pBytesString, IPersistStream pPersistStream)
    {
        byte[] myByteArray = Convert.FromBase64String(pBytesString);
        IMemoryBlobStream myMemoryBlobStream = new MemoryBlobStreamClass();
        IMemoryBlobStreamVariant myMemoryBlobStreamVariant = myMemoryBlobStream as IMemoryBlobStreamVariant;
        myMemoryBlobStreamVariant.ImportFromVariant(myByteArray);
        pPersistStream.Load(myMemoryBlobStream);
    }
  • 相关阅读:
    计网 | 文件传输协议
    Java | JDK8 | Integer
    2.项目管理-应用工具
    1.需求管理
    1.短视频运营基础
    10.视频效果---变形稳定器
    9.时间重映射
    8.效果控件之移动&&缩放
    7.标记
    6.子剪辑与合并剪辑
  • 原文地址:https://www.cnblogs.com/mytudousi/p/16012003.html
Copyright © 2020-2023  润新知