Protocol Buffer C#实例教程:编译Protocol Buffer
现在您已经有了一个. proto,接下来您需要做的就是生成您需要读写AddressBook(以及Person和PhoneNumber)消息的类。为此,需要编译.proto:
如果您尚未安装编译器,请从https://developers.google.com/protocol-buffers/docs/downloads.html下载软件包,并按照自述文件中的说明操作。
现在运行编译器,指定源目录(您的应用程序的源代码所在的位置,如果不提供值,则使用当前目录)、目标目录(您希望生成的代码所在的位置;通常与$SRC_DIR相同),以及到您的. proto的路径,命令如下:
protoc -I=$SRC_DIR --csharp_out=$DST_DIR $SRC_DIR/addressbook.proto
因为您想要C#类,所以您使用--csharp_out option选项,其他受支持的语言也提供了类似的选项。
这将在您指定的目标目录中生成Addressbook. cs。要编译这段代码,您需要一个引用Google.Protobuf程序集。
addressbook类
生成Addressbook.cs为您提供了五种有用的类型:
一个静态地址簿类,包含关于protocol buffer消息的元数据。
具有只读People属性的通讯簿类。
具有姓名、身份证、电子邮件和电话属性的个人类。
一个电话号码类,嵌套在静态人员中。类型类。
PhoneType枚举,也嵌套在Person.Types中
您可以阅读更多关于C#生成代码指南中确切生成内容的细节,但是在大多数情况下,您可以将这些内容视为非常普通的C#类型。需要强调的一点是,对应于重复字段的任何属性都是只读的。您可以向集合中添加项目或从中删除项目,但不能用完全独立的集合替换它。重复字段的集合类型始终是重复字段<T>。这种类型类似于列表<T>,但是有一些额外的便利方法,例如添加重载接受项目集合,用于集合初始值设定项。
以下是如何创建Person实例的示例:
Person john = new Person { Id = 1234, Name = "John Doe", Email = "jdoe@example.com", Phones = { new Person.Types.PhoneNumber { Number = "555-4321", Type = Person.Types.PhoneType.HOME } } };
请注意,在C# 6中,您可以使用使用静态来移除Person.Types ugliness:
// Add this to the other using directives using static Google.Protobuf.Examples.AddressBook.Person.Types; ... // The earlier Phones assignment can now be simplified to: Phones = { new PhoneNumber { Number = "555-4321", Type = PhoneType.HOME } }