C# Protobuf-Net 序列化
原始碼位置: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
protobuf序列化後的大小是json的1/10,xml格式的1/20,是二進位制序列化的1/10
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
相關文章
- C#中使用protobuf-net進行序列化C#
- Protobuf-net:C#高效序列化工具,助力介面傳輸與前端解析C#前端
- c#序列化C#
- C# 序列化(總)C#
- c#序列化與反序列化概述C#
- C#序列化和反序列化(json)C#JSON
- C# 序列化與反序列化jsonC#JSON
- C# 三種序列化C#
- C# Json 序列化與反序列化一C#JSON
- C# Json 序列化與反序列化二C#JSON
- C#中物件的序列化與反序列化C#物件
- C# Json反序列化C#JSON
- C#中的物件序列化C#物件
- C# 實體類序列化與反序列化一 (XmlSerializer)C#XML
- C# - XML讀寫與序列化C#XML
- C# 的三種序列化方法C#
- C# 實現複雜物件的序列化與反序列化C#物件
- C# 實體類序列化與反序列化二 (DataContractSerializer)C#
- 在C#中實現Json的序列化與反序列化C#JSON
- C#基礎系列:序列化效率比拼C#
- C# xml文件反序列化記事C#XML
- C#中實現JSON功能及物件的序列化和反序列化C#JSON物件
- C# XmlSerializer實現序列化淺析(轉載)C#XML
- C# 檢視序列化的實體位元組數C#
- 在C#中使用Json.Net進行序列化和反序列化及定製化C#JSON
- C# 中使物件序列化/反序列化 Json 支援使用派生型別以及泛型的方式C#物件JSON型別泛型
- 簡單介紹C#使用物件序列化類庫MessasgePackC#物件
- 《CLR Via C#》讀書筆記:24.執行時序列化C#筆記
- C#複雜XML反序列化為實體物件兩種方式C#XML物件
- 物件序列化(序列化)物件
- Java序列化、反序列化、反序列化漏洞Java
- .net Web API自動反序列化xml傳參為C#實體WebAPIXMLC#
- 序列化與反序列化
- C# Json反序列化 資料協定型別 無法反序列化 因為未找到必需的資料成員C#JSON型別
- 序列化與反序列化(GO)Go
- Java的序列化和反序列化Java
- Java的序列化與反序列化Java
- C++ 序列化和反序列化C++