C# Protobuf-Net 序列化

來源:互聯網
上載者:User
源碼位置:protobuf-net

1、安裝Nuget :

工具--拓展管理器



安裝完成後重啟Microsoft Visual Studio 2010,可以看到:

小註:

只有該解決方案已經開啟項目的時候,才會看到下面兩項:


2、安裝protobuf_net(在Nuget中找到protobuf-net,安裝,選擇項目搞定)



3、封裝簡單操作類(在項目中引入using ProtoBuf;就可以直接用了)

    /// <summary>    /// Protobuf_net    /// </summary>    public class ProtobufSerializer    {        /// <summary>        /// 序列化        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="t"></param>        /// <returns></returns>        public static string Serialize<T>(T t)        {            using (MemoryStream ms = new MemoryStream())            {                Serializer.Serialize<T>(ms, t);                return Encoding.Unicode.GetString(ms.ToArray());            }        }        /// <summary>        /// 還原序列化        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="content"></param>        /// <returns></returns>        public static T DeSerialize<T>(string content)        {            using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(content)))            {                T t = Serializer.Deserialize<T>(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


以上就是C# Protobuf-Net 序列化的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.