protobuf-net简单使用

  • 第一个测试的proto文件
 1 syntax = "proto3";
 2 package ProtoMsg;
 3 
 4 message Foo
 5 {
 6     string name = 1;
 7     int32 id = 2;
 8     repeated bytes data = 3;
 9     enum Types
10     {
11         Hight = 0;
12         Low = 1;
13         Normal = 2;
14     }
15     Types type = 4;
16 }
  •  第二个测试proto文件
1 syntax = "proto3";
2 import "Foo.proto";
3 package ProtoMsg;
4 
5 message FooWapper
6 {
7     repeated Foo foos = 1;
8 }
  • 分别生成C#源文件
1 protogen.exe Foo.proto --csharp_out=./
2 protogen.exe FooWrapper.proto --csharp_out=./
  • 例子程序
 1 static void Main(string[] args)
 2         {
 3             FooWapper fw = new FooWapper();
 4             Foo f = new Foo();
 5             f.Datas.Add(new byte[] {0x1, 0x2, 0x3});
 6             f.Id = 12345678;
 7             f.Name = "proto-net";
 8             f.Type = Foo.Types.Hight;
 9             fw.Foos.Add(f);
10 
11             byte[] data;
12             Console.WriteLine("开始序列化数据.");
13             using (var stream = new MemoryStream())
14             {
15                 Serializer.Serialize(stream, fw);
16                 data = stream.ToArray();
17             }
18 
19             Console.WriteLine("开始反序列化数据.");
20             using (var stream = new MemoryStream(data))
21             {
22                 var _fw = Serializer.Deserialize<FooWapper>(stream);
23                 Console.WriteLine(_fw);
24             }
25 
26             Console.ReadKey();
27         }
  • 程序执行结果

 

原文地址:https://www.cnblogs.com/linxmouse/p/7902418.html