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