成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

C#中使用protobuf-net進(jìn)行序列化

不知名網(wǎng)友 / 2685人閱讀

摘要:通過類庫提供的和分別執(zhí)行序列化和反序列化,而不用依賴任何生成的代碼。只針對(duì)平臺(tái)的話,不需要文件就可以應(yīng)用序列化協(xié)議。

前一篇文章我們看到使用Google.Protobuf有諸多不便(參考《如何在C#中使用Google.Protobuf工具》),這次我們來看看另一個(gè)工具的使用體驗(yàn)。

相關(guān)資料、鏈接:

  • github項(xiàng)目:https://github.com/protobuf-net/protobuf-net
  • nuget包名稱:protobuf-net、protobuf-net.BuildTools
  • 作者:Marc Gravell
  • 支持.net平臺(tái):.net5/.NETFramework4.6.1/.NETStandard2.0等
  • protobuf-net BuildTools文檔:https://protobuf-net.github.io/protobuf-net/build_tools

準(zhǔn)備工作

在C#中編寫目標(biāo)類型:
在類級(jí)別增加注解[ProtoContract],在字段級(jí)別增加注解[ProtoMember(orderxxx)]
    [ProtoContract]    public class ErrorLog    {        [ProtoMember(1)]        public string LogID { get; set; }        [ProtoMember(2)]        public string Context { get; set; }        [ProtoMember(3)]        public string Stack { get; set; }    }

當(dāng)安裝了protobuf-net.BuildTools工具后,還可以在開發(fā)時(shí)對(duì)目標(biāo)類型(添加了[ProtoContract]注解)的定義進(jìn)行檢查,比如字段順序重復(fù)、使用的字段類型不符合protobuf要求等。比如因疏忽設(shè)置了重復(fù)的字段順序,提示效果如下:

?

序列化操作

        public static byte[] Serialize(ErrorLog log)        {            using (MemoryStream memoryStream = new MemoryStream())            {                ProtoBuf.Serializer.Serialize(memoryStream, log);                return memoryStream.ToArray();            }        }

?

反序列化操作

        public static ErrorLog DeSerialize(byte[] data)        {            using (MemoryStream ms = new MemoryStream(data))            {                return ProtoBuf.Serializer.Deserialize(ms);            }        }

?

總結(jié)、理解?

  • 這個(gè)工具的使用體驗(yàn)屬于Code-First模式,先定義類型,并使用注解進(jìn)行標(biāo)記,不需要先編寫.proto文件。
  • 通過類庫提供的ProtoBuf.Serializer.Serialize()和ProtoBuf.Serializer.Deserialize()分別執(zhí)行序列化和反序列化,而不用依賴任何生成的代碼。
  • 只針對(duì).NET平臺(tái)的話,不需要.proto文件就可以應(yīng)用protobuf序列化協(xié)議。如果需要跨語言編程,再根據(jù)C#類型編寫.proto文件(也可以通過工具自動(dòng)生成proto文件),然后生產(chǎn)目標(biāo)語言的對(duì)應(yīng)類型。
  • 借助于protobuf-net.BuildTools工具的輔助,可以及早的發(fā)現(xiàn)編碼錯(cuò)誤,一定程度上提高了開發(fā)效率。
  • 綜上,對(duì)于.NET平臺(tái)為主的開發(fā)者來說,使用protobuf-net相對(duì)來說代碼可讀性更高、維護(hù)成本更小,同時(shí)也能兼顧跨語言開發(fā),建議首先此方式。

?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/125111.html

相關(guān)文章

  • C#列化XML異常:在 XML文檔(0, 0)有一個(gè)錯(cuò)誤“缺少根元素”

    摘要:在反序列化字符串為對(duì)象時(shí),拋出如下異常。即在文檔中有一個(gè)錯(cuò)誤缺少根元素。首先看下代碼拋出異常是在這里出現(xiàn)的。問題在于這里,原因是進(jìn)行了寫入操作,最后流的位置停留在尾部。因此,在反序列化之前將流的位置定位到開始的位置即可。 Q: 在反序列化 Xml 字符串為 Xml 對(duì)象時(shí),拋出如下異常。showImg(https://segmentfault.com/img/bVHTdx?w=576&...

    scq000 評(píng)論0 收藏0
  • 集合數(shù)據(jù)處理(C#、JavaScript 和 Java)

    摘要:系列公用委托都用于委托帶有返回值的的方法,所有都是最后一個(gè)參數(shù)代表返回值類型。的字面對(duì)象據(jù)稱也是哈希實(shí)現(xiàn)。 Java 丟了好多年,最近在揀起來,首先當(dāng)然是了解這么多年來它的變化,于是發(fā)現(xiàn)了 Java 8 的java.util.stream。在學(xué)習(xí)和試驗(yàn)的過程中,相比較于 C# 和 javascript,有那么些心得,作文以記之。 早些時(shí)間寫過一篇《ES6 的 for..of 和 Ge...

    zacklee 評(píng)論0 收藏0
  • 集合數(shù)據(jù)處理(C#、JavaScript 和 Java)

    摘要:系列公用委托都用于委托帶有返回值的的方法,所有都是最后一個(gè)參數(shù)代表返回值類型。的字面對(duì)象據(jù)稱也是哈希實(shí)現(xiàn)。 Java 丟了好多年,最近在揀起來,首先當(dāng)然是了解這么多年來它的變化,于是發(fā)現(xiàn)了 Java 8 的java.util.stream。在學(xué)習(xí)和試驗(yàn)的過程中,相比較于 C# 和 javascript,有那么些心得,作文以記之。 早些時(shí)間寫過一篇《ES6 的 for..of 和 Ge...

    sherlock221 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<