Protobuffer的学习 在C#同序列化一个数据类,和反序列化这数据类取得数据的过程。

在网络传输的过程中 数据会比较多 处理起来会比较麻烦,因此得引入分层的概念,

计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决
“Any problem in computer science can be solved by anther layer of indirection.”

在客服端 和 服务器可以制订一套通信协议, 通信协议是客服端和服务端 共同约定的一个 数据结构,其包含了双方可以发送,并对方可以识别处理的数据包。

Protobuffer 可以把 一个类的实例序列化,和反序列化, 通过反射机制去取得, 开源的。
也支持JsonMap
github源码
2019最新版是 3.7,需要.Net 4.5以上
在这里插入图片描述
API

google 指南

性能比较

protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google
提供了多种语言的实现:java、c#、c++、go 和
python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml
进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

对一个数据类进行 序列化

项目要添加Pb的引用才可以

using ProtoBuf;
using ProtoBuf.Meta;

    [ProtoContract]
    class NetMode
    {

        [ProtoMember(1)]
        public int id;
        [ProtoMember(2)]
        public string name;
        //如果要使用构造函数,那么 默认构造函数 必须得存在,这个是一个小坑不然会报错
           public NetMode()
        {
        }

        public NetMode(int id,string name)
        {
            this.id = id;
            this.name = name;
        }
    }
另外如果有数据类有子类继承, 需要在父类上添加特性  [ProtoInclude(number, typeof(子类名))] 
为啥呢?
 因为 这个   [ProtoContract] 特性 不允许子类继承,也不允许 多个存在

在这里插入图片描述

如果 数据类不使用构造函数 则不会报错

在这里插入图片描述

Untiy中其实也有序列化特性<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值