Ответ 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 (хотя последние обеспечивают больший контроль над некоторыми точками сериализации, такими как наследование и числовые макеты).