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);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章