[英]Generate C# from proto files and vice versa interpreting custom options
我正在使用protobuf-net ,我正在嘗試:
這分別很容易使用:
protogen.exe
工具 Serializer<T>.GetProto()
方法 但問題是我需要支持protobuffer 自定義選項 ,但它似乎並不像我那樣簡單。
讓我解釋:
基本上,給出:
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
)已經存在於protofile中(例如,my_custom_options.proto),自定義屬性類也可以存在於某個位置( MyMessageOptionAttribute
和MyFieldOptionAttribute
)。 實現這一目標的首選方式是什么? 解決方案不必依賴protobuf-net。
我最后通過從protobuf-csharp分配ProtoGen項目來公開一些內部類型(生成器,大部分),並通過允許自定義生成器注冊使SourceGenerators
可擴展。
這樣,我就可以使用proto描述符對象模型來編寫自己的C#生成器。
一個棘手的問題是在啟動解析之前注冊自定義選項類型:
Protoc.exe
然后是ProtoGen.exe
) RegisterAllExtensions
方法配置ExtensionRegistry
。 Descriptor.Options
集合。 目前沒有一種簡單的方法可以做到這一點。 所需的更改主要是csharp.xslt文件。 有關此報告的錯誤但尚未修復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.