C# Protobuf-Net 序列化

源码位置:protobuf-net

1、安装Nuget :

工具–拓展管理器

C#  Protobuf-Net  序列化

C#  Protobuf-Net  序列化

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

C#  Protobuf-Net  序列化

小注:

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

C#  Protobuf-Net  序列化

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

C#  Protobuf-Net  序列化

C#  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:Devprotobuf-netprotobuf-netProtoReader.cs:行号 257   在 ProtoBuf.ProtoReader.ReadString() 位置 c:Devprotobuf-netprotobuf-netProtoReader.cs:行号 494   在 proto_2(Object , ProtoReader )   在 ProtoBuf.Serializers.CompiledSerializer.ProtoBuf.Serializers.IProtoSerializer.Read(Object value, ProtoReader source) 位置 c:Devprotobuf-netprotobuf-netSerializersCompiledSerializer.cs:行号 57   在 ProtoBuf.Meta.RuntimeTypeModel.Deserialize(Int32 key, Object value, ProtoReader source) 位置 c:Devprotobuf-netprotobuf-netMetaRuntimeTypeModel.cs:行号 775   在 ProtoBuf.Meta.TypeModel.DeserializeCore(ProtoReader reader, Type type, Object value, Boolean noAutoCreate) 位置 c:Devprotobuf-netprotobuf-netMetaTypeModel.cs:行号 700   在 ProtoBuf.Meta.TypeModel.Deserialize(Stream source, Object value, Type type, SerializationContext context) 位置 c:Devprotobuf-netprotobuf-netMetaTypeModel.cs:行号 589   在 ProtoBuf.Meta.TypeModel.Deserialize(Stream source, Object value, Type type) 位置 c:Devprotobuf-netprotobuf-netMetaTypeModel.cs:行号 566   在 ProtoBuf.Serializer.Deserialize[T](Stream source) 位置 c:Devprotobuf-netprotobuf-netSerializer.cs:行号 77   在 Serialize.ProtobufSerializer.DeSerialize[T](String content) 位置 E:WorkSpaceWorkSpaceTestCompressTestSerializeProtobufSerializer.cs:行号 40   在 Serialize.Form1.button1_Click(Object sender, EventArgs e) 位置 E:WorkSpaceWorkSpaceTestCompressTestSerializeForm1.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

以上就是C#  Protobuf-Net  序列化的内容,更多相关内容请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1432226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 06:23:17
下一篇 2025年12月17日 06:23:25

相关推荐

发表回复

登录后才能评论
关注微信