我正在使用protobuf-net,并尝试做到以下两点:
让我解释一下:
- 从.proto文件生成C#类
- 从C#类生成.proto文件
protogen.exe
工具Serializer<T>.GetProto()
方法
让我解释一下:
- 从带有自定义选项的消息和字段的.proto文件中,我想生成一个由.NET自定义属性装饰的C#类。
- 从用自定义属性装饰的C#类中,我想生成一个带有自定义选项的消息和字段的.proto文件。
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
)可能已经存在于proto文件中(例如,my_custom_options.proto),自定义属性类也可以存在于某个地方(MyMessageOptionAttribute
和MyFieldOptionAttribute
)。 - 我尝试使用protogen.exe和自定义xslt,但是protogen似乎不支持自定义选项。
如何实现最佳方法?解决方案不必依赖protobuf-net。