Ⅰ. はじめに
タイトルの通り「C#でprotobuf-netを使ってデフォルト値を強制的に出力する方法」です。
protobuf-netはデフォルト値を出力しません。
ageが省略された例
Human.proto
syntax = "proto3"; package MyPackage; message Human { string name = 1; uint32 age = 2; }
Ⅱ. やり方
サンプルプログラム
using MyPackage; using ProtoBuf.Meta; private static RuntimeTypeModel Serializer { get; set; } = TypeModel.Create(); static void Main(string[] args) { var human = new Human { Name = "name001", Age = 0 }; using (var ms = new MemoryStream()) { Serializer.UseImplicitZeroDefaults = false; Serializer.Serialize(ms, human); byte[] bytes = ms.ToArray(); Console.WriteLine(BitConverter.ToString(bytes).Replace("-", " ")); } }
実行結果