Как создать файл .proto из класса С#, украшенного атрибутами?

Попытка разобраться с google protobuf. Я нашел некоторую реализацию protobuf в С#, но у них не хватает одной функции: возможность автоматически генерировать .proto файлы из существующего класса С#, украшенного атрибутами.

Причина, по которой я хочу сделать это таким образом, вместо перехода с автогенерированных классов С# из файла .proto, состоит в том, что у меня уже есть классы С#, определенные в моем проекте, и я не хочу дублировать их, чтобы удовлетворить ProtoBuf.

Кто-нибудь столкнулся с таким сценарием?


Обновление

Можно ли просто украсить класс С# и не использовать файл .proto для использования protobuf?

Ответы

Ответ 1

Хорошие новости; то, что вы описали (имея существующие классы С#), является ожидаемым вариантом использования protobuf-net. Все материалы .proto( "protogen", надстройка VS и т.д.) Были добавлены как afterthoughts. Ядро protobuf-net не знает о них или не заботится о них.

Буферы протокола

определяют DSL (.proto, как вы упоминаете), который используется совместно между реализациями, и используется (иногда) для генерации кода. Когда я впервые написал protobuf-net, аспект генерации кода не был для меня самой большой проблемой - просто разработчики .NET, как правило, были виноваты (включая меня), а не "контракт сначала".

Как следствие, protobuf-net не нуждается в файлах .proto; присвоенного класса достаточно, чтобы однозначно сериализовать/десериализовать. Просто используйте Serializer.Serialize, .Merge и .Deserialize (и т.д.).

Это сказало; он включает в себя несколько очень недостаточно развитой и экспериментальной поддержки для этого:

string proto = Serializer.GetProto<YourType>();

Это далеко не полный, но может работать для простых типов. Если у вас есть определенные случаи, когда он не работает, сообщите мне (добавьте комментарий или зарегистрируйте проблему). Однако; большую часть времени люди, заинтересованные в .proto, сначала пишут .proto и работают оттуда.

Примеры рабочих декорированных типов показаны на домашней странице проекта ; это зависит только от того, используете ли вы атрибуты WCF, атрибуты xml или атрибуты protobuf-net (хотя последние обеспечивают больший контроль над некоторыми точками сериализации, такими как наследование и числовые макеты).

Ответ 2

Перед Skeet Марк работает здесь и получает массивные взлеты, позвольте мне указать protobuf.net.