zoukankan      html  css  js  c++  java
  • 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}");
                }

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

  • 相关阅读:
    SQL Server XML数据解析
    c# XML和实体类之间相互转换(序列化和反序列化)
    C#解析XML详解(XPath以及带命名空间NameSpace)
    Jquery实现按钮点击遮罩加载,处理完后恢复
    jquery控制div随滚动条滚动效果
    asp.net中利用Jquery+Ajax+Json实现无刷新分页(二)
    easyUI tree点击文字展开节点
    201805牛客模拟考
    策略模式
    非线程安全演变成线程安全---原子性与加锁机制
  • 原文地址:https://www.cnblogs.com/EncryptingLife/p/6140386.html
Copyright © 2011-2022 走看看