在网络传输的过程中 数据会比较多 处理起来会比较麻烦,因此得引入分层的概念,
计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决
“Any problem in computer science can be solved by anther layer of indirection.”
在客服端 和 服务器可以制订一套通信协议, 通信协议是客服端和服务端 共同约定的一个 数据结构,其包含了双方可以发送,并对方可以识别处理的数据包。
Protobuffer 可以把 一个类的实例序列化,和反序列化, 通过反射机制去取得, 开源的。
也支持JsonMap
github源码
2019最新版是 3.7,需要.Net 4.5以上
API
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中其实也有序列化特性<