/ Published in: C#
This is a simple demo of Google Protocol Buffers in C# using Jon Skeet's protobuf C# port. The sample data type includes an array/list and nested types. The binary data is a smaller, faster alternative to XML or JSON. The C# built-in binary serializers created massive buffers that were 4x the size of JSON buffers.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
static void Main(string[] args) { // Add to references: // jskeet-dotnet-protobufs-e53a4f8\src\ProtocolBuffers\bin\release\Google.ProtocolBuffers.dll // ...or equivalent. // Build data. { Str = "my string", Sub = new ProtoBufDemo.ProtoBufDemoMsg.Types.ProtoBufDemoChild.Builder { I1 = 1, I2 = 2, I3 = 3 }.Build(), I = 123, // SubsList = new ProtoBufDemo.ProtoBufDemoMsg.Types.ProtoBufDemoChild[]{...}, Can't do this yet - see // http://msmvps.com/blogs/jon_skeet/archive/2008/08/20/lessons-learned-from-protocol-buffers-part-1-messages-builders-and-immutability.aspx }; b.SubsList.Add(new ProtoBufDemo.ProtoBufDemoMsg.Types.ProtoBufDemoChild.Builder { I1 = 1, I2 = 2, I3 = 3 }.Build()); b.SubsList.Add(new ProtoBufDemo.ProtoBufDemoMsg.Types.ProtoBufDemoChild.Builder { I1 = 11, I2 = 22, I3 = 33 }.Build()); b.SubsList.Add(new ProtoBufDemo.ProtoBufDemoMsg.Types.ProtoBufDemoChild.Builder { I1 = 111, I2 = 222, I3 = 333 }.Build()); ProtoBufDemo.ProtoBufDemoMsg m1 = b.Build(); // Done building data. string s1 = m1.ToString(); // Convert to binary array. byte[] ba = m1.ToByteArray(); // reconstitute. ProtoBufDemo.ProtoBufDemoMsg m2 = ProtoBufDemo.ProtoBufDemoMsg.ParseFrom(ba); string s2 = m1.ToString(); System.Diagnostics.Debug.Assert(s1 == s2); return; } // Proto file: // protoBufDemo.proto // Demo usage of Jon Skeet's C# Protocol Buffers // Build using: // %protoc% --descriptor_set_out=protoBufDemo.protobin --proto_path=protos;.\ --include_imports .\protoBufDemo.proto // %protogen% protoBufDemo.protobin // where protoc=jskeet-dotnet-protobufs-e53a4f8\lib\protoc.exe // and jskeet-dotnet-protobufs-e53a4f8\src\ProtoGen\bin\Debug\ProtoGen.exe // The output file will be ProtoBufDemoClass.cs package Features; import "google/protobuf/csharp_options.proto"; option (google.protobuf.csharp_file_options).namespace = "ProtoBufDemo"; option (google.protobuf.csharp_file_options).umbrella_classname = "ProtoBufDemoClass"; option optimize_for = SPEED; message ProtoBufDemoMsg { message ProtoBufDemoChild { required int32 i1=1; required int32 i2=2; required int32 i3=3; } required string str = 1; required ProtoBufDemoChild sub = 2; repeated ProtoBufDemoChild subs = 3; required int32 i = 4; }
URL: http://code.google.com/p/protobuf-csharp-port/wiki/GettingStarted