Хорошие новости; то, что вы описали (имея существующие классы C#), является ожидаемым вариантом использования protobuf-net. Все материалы .proto («protogen», надстройка VS и т. Д.) Были добавлены как последумности. Ядро protobuf-net не знает о них и не заботится о них.
протокольные буферы определяют DSL (.proto, как вы упоминаете), который используется совместно между реализациями и используется (иногда) для генерации кода. Когда я впервые написал protobuf-net, аспект генерации кода не был моим самым большим беспокойством - просто разработчики .NET обычно были виноваты (включая меня), а не «контракт первым».
Как следствие, protobuf-net не нуждается .proto файлы для работы; присвоенного класса достаточно, чтобы однозначно сериализовать/десериализовать. Просто используйте Serializer.Serialize
, .Merge
и .Deserialize
(и т.д.).
Это сказано; это делает включают некоторые очень слаборазвитых и экспериментальная поддержка для этого:
string proto = Serializer.GetProto<YourType>();
Это далеко не полный, но может работать для простых типов. Если у вас есть определенные случаи, когда он не работает, сообщите мне (добавьте комментарий или зарегистрируйте проблему). Однако; в большинстве случаев, люди, заинтересованные в .proto, напишут .proto сначала и работа оттуда.
Примеры рабочих украшенных типов показаны на project home page; это зависит только от того, используете ли вы атрибуты WCF, атрибуты xml или атрибуты protobuf-net (хотя последние обеспечивают больший контроль над некоторыми точками сериализации, такими как наследование и числовые макеты).
Отлично, это соответствовало бы моим требованиям. Однако, еще одна вещь, Protobuf-Net реализует всю спецификацию Protobuf? –
Pretty-much; Если честно, спецификация проводного формата не является огромной. Вы хотите объединиться с отдельной реализацией .proto? Он должен работать нормально, но если у вас есть * .proto (для другого конца), я бы рекомендовал создать DTO (из .proto) и подгонки к вашим типам. Он также становится креативным, позволяя protobuf-net поддерживать наследование (которое ** не ** входит в основную спецификацию .proto), но сделано таким образом, что позволяет полностью взаимодействовать с другими клиентами. –
Я не собираюсь взаимодействовать с другой реализацией. Я буду использовать protobuf-net как эффективный механизм сериализации/десериализации целой иерархии объектов между двумя приложениями. –