C#使用protobuf-net进行序列化的详细操作

 更新时间:2021年11月25日 16:17:11   作者:chenzk的博客  
本文带领大家学习C#中protobuf-net工具的另一种使用体验,这个工具的使用体验属于Code-First模式,先定义类型,并使用注解进行标记,不需要先编写.proto文件,感兴趣的朋友跟随小编一起看看吧

protobuf 是 google的一个开源项目,可用于以下两种用途:

(1)数据的存储(序列化和反序列化),类似于xml、json等;

(2)制作网络通信协议。

  源代码下载地址:https://github.com/mgravell/protobuf-net;

  开源项目地址如下:https://code.google.com/p/protobuf-net/。

前一篇文章我们看到使用Google.Protobuf有诸多不便(参考《www.jb51.net/article/230186.htm》),这次我们来看看另一个工具的使用体验。

相关资料、链接:

  • github项目:https://github.com/protobuf-net/protobuf-net
  • nuget包名称:protobuf-net、protobuf-net.BuildTools
  • 作者:Marc Gravell
  • 支持.net平台:.net5\.NETFramework4.6.1\.NETStandard2.0等
  • protobuf-net BuildTools文档:https://protobuf-net.github.io/protobuf-net/build_tools

准备工作

在C#中编写目标类型:

在类级别增加注解[ProtoContract],在字段级别增加注解[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; }
    }

当安装了protobuf-net.BuildTools工具后,还可以在开发时对目标类型(添加了[ProtoContract]注解)的定义进行检查,比如字段顺序重复、使用的字段类型不符合protobuf要求等。比如因疏忽设置了重复的字段顺序,提示效果如下:

序列化操作

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<ErrorLog>(ms);
            }
        }

总结、理解

  • 这个工具的使用体验属于Code-First模式,先定义类型,并使用注解进行标记,不需要先编写.proto文件。
  • 通过类库提供的ProtoBuf.Serializer.Serialize()和ProtoBuf.Serializer.Deserialize()分别执行序列化和反序列化,而不用依赖任何生成的代码。
  • 只针对.NET平台的话,不需要.proto文件就可以应用protobuf序列化协议。如果需要跨语言编程,再根据C#类型编写.proto文件(也可以通过工具自动生成proto文件),然后生产目标语言的对应类型。
  • 借助于protobuf-net.BuildTools工具的辅助,可以及早的发现编码错误,一定程度上提高了开发效率。
  • 综上,对于.NET平台为主的开发者来说,使用protobuf-net相对来说代码可读性更高、维护成本更小,同时也能兼顾跨语言开发,建议首先此方式。

到此这篇关于C#中使用protobuf-net进行序列化的文章就介绍到这了,更多相关C# protobuf-net序列化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#中的modbus Tcp协议的数据抓取和使用解析

    C#中的modbus Tcp协议的数据抓取和使用解析

    这篇文章主要介绍了C#中的modbus Tcp协议的数据抓取和使用解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • c#给图片添加文字的代码小结

    c#给图片添加文字的代码小结

    c#编程中,我们需要为图片添加文字水印,那么就可以参考下面的几个代码
    2012-11-11
  • C#向Word插入排版精良的TextBox

    C#向Word插入排版精良的TextBox

    这篇文章主要为大家详细介绍了C#向Word插入排版精良的Text Box的相关方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • C#实现选择排序

    C#实现选择排序

    这篇文章介绍了C#实现选择排序的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • C#中对字符串进行压缩和解压的实现

    C#中对字符串进行压缩和解压的实现

    本文主要介绍了C#中对字符串进行压缩和解压的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • C#中逆变的实际应用场景详解

    C#中逆变的实际应用场景详解

    在好多的.net的书籍中都看到过逆变和协变的概念,也在网上搜了一些关于这两个概念的解释,但是一直感觉似懂非懂的,直到最近在项目中实际遇到了一个问题,恰好用到了逆变,下面这篇文章主要给大家介绍了关于C#中逆变的实际应用场景,需要的朋友可以参考下
    2022-01-01
  • C#数组应用分析

    C#数组应用分析

    C#数组应用分析...
    2007-08-08
  • c#字符串使用正则表达式示例

    c#字符串使用正则表达式示例

    这篇文章主要介绍了c#字符串使用正则表达式示例,需要的朋友可以参考下
    2014-02-02
  • 探讨Object转为String的几种简易形式详解

    探讨Object转为String的几种简易形式详解

    本篇文章是对Object转为String的几种简易形式进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • C#使用iTextSharp从PDF文档获取内容的方法

    C#使用iTextSharp从PDF文档获取内容的方法

    这篇文章主要介绍了C#使用iTextSharp从PDF文档获取内容的方法,涉及C#基于iTextSharp操作pdf文件的相关技巧,需要的朋友可以参考下
    2015-06-06

最新评论