Как создать файл .proto из класса C #, украшенного атрибутами? - PullRequest
21 голосов
/ 26 августа 2009

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

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

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


Обновление

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

Ответы [ 2 ]

31 голосов
/ 26 августа 2009

Хорошие новости; то, что вы описали (имея существующие классы C #), является ожидаемым вариантом использования protobuf-net. Все .proto вещи ("protogen", надстройка VS и т. Д.) Были добавлены как afterfterts . Ядро 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 (хотя последние обеспечивают больший контроль над некоторыми конкретными точками сериализации, такими как наследование и числовые макеты).

4 голосов
/ 26 августа 2009

До Скит Марк бежит сюда и получает огромные взлеты, позвольте мне указать protobuf.net.

...