C#/net 使用Protocol Buffers入门

Protocol buffers 是一个由谷歌开发的开源的编码机制用于将结构化的数据序列化或者反序列化,被设计成语言以及平台中立,protobuff比xml更简单比json还要紧凑一些,网上有一些关于对比他与一些序列化的对比这里就不再赘述。这里主要说一下在C#/dotNet里是怎么运行的。

1.下载google-protobuff的源码或者直接去下载别人编译好的dll也可以。如果是源码在VS2015里编译一下如果没有问题会生成Google.Protobuf.dll

2.定义数据结构,注意这里定义后可以生成各种语言的代码文件.我这里定义的数据结构如下:

  

syntax = "proto3";
package ConsoleService;

message Order{
    int32 orderId = 1;
    string memberName = 2;
    string memberPhone = 3;
    string memberReceiveName =4;

    enum PhoneType {
        MOBILE = 0;
        HOME = 1;
        WORK = 2;
    }

     message PhoneNumber {
         string number = 1;
            PhoneType type = 2;
    }

  repeated PhoneNumber phones = 5;
}

注意这里的package是指命名空间,也可以这样 option csharp_namespace = "ConsoleService";

3.生成c#文件

  可以用 protogen 把执行文件放到system32里或者配置环境变量这样就可以直接使用在命令行下进入到文件目录 然后执行

   protogen -i:./protoorder.proto -Order.cs 

4.使用

  

Order ir = new Order {
                   MemberName="侧山东省的说的",
                   MemberPhone="15858209305",
                   MemberReceiveName ="encryFish",
                   OrderId=1234
            };
            using (var output = File.Create("encry.dat"))
            {
                ir.WriteTo(output);
            }
            Order myOrder;
            using (var input = File.OpenRead("encry.dat"))
            {
                myOrder = Order.Parser.ParseFrom(input);
               
                //myOrder=Order.Parser.ParseFrom(
                Console.WriteLine($"my order receiveName is {myOrder.MemberReceiveName}");
            }

到这里使用就结束了,大家可以自行测试下在不同的序列化方式下执行的速度跟最后文件的大小,推荐大家在系统架构的时候可以采用这种方式

原文地址:https://www.cnblogs.com/EncryptingLife/p/6140386.html