ArcEngine 序列化AO对象
2024-09-08 14:37:48
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);
}
最新文章
- Python中的生成器与yield
- 关于服务器响应,浏览器请求的理解以及javaWeb项目的编码问题
- HDU 5439 Aggregated Counting
- 计蒜客 取数游戏(dp)
- C# 中的委托和事件[转自张子扬]
- keep健身计划
- netbeans 将项目打包生成单个可执行的 jar
- Infix to posfix 自己写stack,没有()
- linux 下maven安装
- Java 后台创建word 文档
- [转]C# 实现Jwt bearer Authentication
- spark2.1源码分析1:Win10下IDEA源码阅读环境的搭建
- Springboot &; Mybatis 构建restful 服务
- 使用text-align:justify,让内容两端对齐,兼容IE及主流浏览器的方法
- 数据库只有mdf文件而没有ldf文件,如何恢复数据库
- cuda9.0编译caffe报错nvcc fatal : Unsupported gpu architecture &#39;compute_70&#39;
- 【linux C】C语言中常用的几个函数的总结【一】
- AngularJS+bootstrap-switch 实现开关控件
- IIS7配置HTTPS+默认访问https路径
- python 面向对象编程案例01