ProtoBuf也是一种序列化的方法
什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:
Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式可以直接在官网下载Dll文件
导入到工程中就可以用了
ProTobuf这个命名空间是常用的
在需要序列花的类签名上面加上[ProtoContract]
在类的字段签名上加[ProtoMeber(i)]每个都加括号的数字增加
需要序列化的类
//需要被序列化的类都要加上这个可序列化特性
[ProtoContract]
class ProtoBuf {
//成员也要加这个
[ProtoMember(1)]
public int MyProperty { get; set; }
[ProtoMember(2)]
public int Age { get; set; }
}
//序列化对象
static byte[] GetVs(object value) {
byte[] buffer = null;
//创建内存流
using (MemoryStream ms=new MemoryStream()) {
if (value != null) {
//序列化对象
RuntimeTypeModel.Default.Serialize(ms, value);
//重置当前流的位置
ms.Position = 0;
//从流中读取字节写到缓冲区必须把缓冲区实例化出来
buffer = new byte[ms.Length];
//从流中读取数据写到缓冲区
ms.Read(buffer, 0, (int)ms.Length);
}
}
return buffer;
}
反序列化对象
//通过Protobuf的泛型反序列化 static object DProtobuffer(byte[] data) {
object value = null;
//创建内存流对象并把字节数组写入流中
using (MemoryStream ms=new MemoryStream(data)) {
//使用protobuf的泛型方法反序列化对象参数是流返回值是object
value = Serializer.Deserialize(ms);
}
return value;
}