【发布时间】:2011-03-28 11:43:54
【问题描述】:
我正在使用protobuf-net,我正在尝试:
- 从 .proto 文件生成 C# 类
- 从 C# 类生成 .proto 文件
这很容易分别使用:
-
protogen.exe工具 -
Serializer<T>.GetProto()方法
但问题是我需要支持 protobuffer custom options,而且它似乎不像我那么简单。
让我解释一下:
- 从包含应用于消息和字段的自定义选项的 proto 文件中,我想生成一个由 .NET 自定义属性修饰的 C# 类。
- 从一个由自定义属性修饰的 C# 类,我想生成一个原型文件,其中自定义选项应用于消息和字段。
基本上,给定:
message person {
option (my_message_option) = true;
optional string firstname = 1 [(my_field_option) = 42];
optional string lastname = 2 [(my_field_option) = 12];
optional int age = 3;
}
我要生成:
[ProtoContract, MyMessageOption(true)]
public class Person
{
[ProtoMember(1), MyFieldOption(42)]
public string Firstname;
[ProtoMember(2), MyFieldOption(12)]
public string Firstname;
[ProtoMember(3)]
public string Firstname;
}
...反之亦然。
注意事项:
- 自定义选项定义
(
my_message_option和my_field_option) 可能已经存在 在原型文件中(例如, my_custom_options.proto),以及 自定义属性类也可以 存在于某处 (MyMessageOptionAttribute和MyFieldOptionAttribute)。 - 我尝试使用 protogen.exe 和 自定义 xslt 但 protogen 似乎没有 支持自定义选项。
实现这一目标的首选方法是什么? 解决方案不必依赖 protobuf-net。
【问题讨论】:
-
我想做同样的事情,从 proto 文件生成修饰的 C# 文件(用于 protobuf-net)。你能举例说明你是如何做到这一点的吗?谢谢!
标签: c# code-generation protocol-buffers protobuf-net