C# Protobuf-Net 序列化

网友投稿 1175 2022-11-13

C# Protobuf-Net 序列化

C#  Protobuf-Net  序列化

源码位置:​​protobuf-net​​

1、安装Nuget :

工具--拓展管理器

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

小注:

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

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

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

///

/// Protobuf_net /// public class ProtobufSerializer { /// /// 序列化 /// /// /// /// public static string Serialize(T t) { using (MemoryStream ms = new MemoryStream()) { Serializer.Serialize(ms, t); return Encoding.Unicode.GetString(ms.ToArray()); } } /// /// 反序列化 /// /// /// /// public static T DeSerialize(string content) { using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(content))) { T t = Serializer.Deserialize(ms); return t; } } }

使用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格式的1/20,是二进制序列化的1/10

作者:jiankunking ​​​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:kafka 常用命令
下一篇:Visual Studio 未能解析主引用 该框架版本高于当前目标框架
相关文章

 发表评论

暂时没有评论,来抢沙发吧~