关键词搜索

源码搜索 ×
×

C# Protobuf-Net 序列化

发布2015-11-09浏览18870次

详情内容

源码位置:protobuf-net

1、安装Nuget 

工具--拓展管理器



安装完成后重启Microsoft Visual Studio 2010,可以看到下图:

小注:

只有该解决方案已经打开项目的时候,才会看到下面两项:


2、安装protobuf_net(在Nuget中找到protobuf-net,安装,选择项目搞定)



3、封装简单操作类(在项目中引入using ProtoBuf;就可以直接用了)

  1. /// <summary>
  2. /// Protobuf_net
  3. /// </summary>
  4. public class ProtobufSerializer
  5. {
  6. /// <summary>
  7. /// 序列化
  8. /// </summary>
  9. /// <typeparam name="T"></typeparam>
  10. /// <param name="t"></param>
  11. /// <returns></returns>
  12. public static string Serialize<T>(T t)
  13. {
  14. using (MemoryStream ms = new MemoryStream())
  15. {
  16. Serializer.Serialize<T>(ms, t);
  17. return Encoding.Unicode.GetString(ms.ToArray());
  18. }
  19. }
  20. /// <summary>
  21. /// 反序列化
  22. /// </summary>
  23. /// <typeparam name="T"></typeparam>
  24. /// <param name="content"></param>
  25. /// <returns></returns>
  26. public static T DeSerialize<T>(string content)
  27. {
  28. using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(content)))
  29. {
  30. T t = Serializer.Deserialize<T>(ms);
  31. return t;
  32. }
  33. }
  34. }

使用UTF8反序列化的时候会出现下面的错误:

---------------------------

---------------------------
System.IO.EndOfStreamException: 尝试读取超出流末尾的内容。
   在 ProtoBuf.ProtoReader.Ensure(Int32 count, Boolean strict) 位置 c:\Dev\protobuf-net\protobuf-net\ProtoReader.cs:行号 257
   在 ProtoBuf.ProtoReader.ReadString() 位置 c:\Dev\protobuf-net\protobuf-net\ProtoReader.cs:行号 494
   在 proto_2(Object , ProtoReader )
   在 ProtoBuf.Serializers.CompiledSerializer.ProtoBuf.Serializers.IProtoSerializer.Read(Object value, ProtoReader source) 位置 c:\Dev\protobuf-net\protobuf-net\Serializers\CompiledSerializer.cs:行号 57
   在 ProtoBuf.Meta.RuntimeTypeModel.Deserialize(Int32 key, Object value, ProtoReader source) 位置 c:\Dev\protobuf-net\protobuf-net\Meta\RuntimeTypeModel.cs:行号 775
   在 ProtoBuf.Meta.TypeModel.DeserializeCore(ProtoReader reader, Type type, Object value, Boolean noAutoCreate) 位置 c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:行号 700
   在 ProtoBuf.Meta.TypeModel.Deserialize(Stream source, Object value, Type type, SerializationContext context) 位置 c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:行号 589
   在 ProtoBuf.Meta.TypeModel.Deserialize(Stream source, Object value, Type type) 位置 c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:行号 566
   在 ProtoBuf.Serializer.Deserialize[T](Stream source) 位置 c:\Dev\protobuf-net\protobuf-net\Serializer.cs:行号 77
   在 Serialize.ProtobufSerializer.DeSerialize[T](String content) 位置 E:\WorkSpace\WorkSpaceTest\CompressTest\Serialize\ProtobufSerializer.cs:行号 40
   在 Serialize.Form1.button1_Click(Object sender, EventArgs e) 位置 E:\WorkSpace\WorkSpaceTest\CompressTest\Serialize\Form1.cs:行号 44
---------------------------
确定   
---------------------------
测试代码: 点击打开链接

C#中Encoding.Unicode与Encoding.UTF8的区别

小注:

本文参考:

序列化悍将Protobuf-Net,入门动手实录
8 种提升 ASP.NET Web API 性能的方法

  相对于XML、二进制序列化方式,Protobuf效率较高,支持数据量较大
protobuf序列化后的大小是json的1/10,xml格式的1https://cdn.jxasp.com:9143/image/20,是二进制序列化的1/10

作者:jiankunking 出处:http://blog.csdn.net/jiankunking


相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载