Я использую protobuf-net , и я пытаюсь:
- Создание класса C # из файла .proto
- Создание файла .proto из класса C #
Это довольно легко, используя соответственно:
protogen.exe
инструмент
Serializer<T>.GetProto()
метод
Но дело в том, что мне нужно поддерживать protobuffer пользовательских опций , и это не так просто, как я.
Позвольте мне объяснить:
- Из файла прото, содержащего пользовательские параметры, применяемые к сообщениям и полям, я хочу создать класс C #, украшенный пользовательскими атрибутами .NET.
- Из класса 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, но не кажется, протоген
иметь поддержку пользовательских опций.
Какой предпочтительный способ добиться этого? Решение не должно полагаться на protobuf-net.