Как мне сгенерировать a.файл proto из класса C#, украшенный атрибутами?
пытаюсь сосредоточиться на Google protobuf. Я нашел некоторую реализацию protobuf в C#, но им, похоже, не хватает одной функции: способности генерировать .файлы proto автоматически из существующего класса C#, украшенного атрибутами.
причина, по которой я хочу сделать это таким образом, а не из автоматически сгенерированных классов C#.proto файл, потому что у меня уже есть классы C#, определенные в моем проекте, и я не хочу дублировать их только для удовлетворения ProtoBuf.
кто-нибудь сталкивался с такой сценарий?
обновление
можно ли просто украсить класс C# и не использовать a .файл proto для использования protobuf?
2 ответов
хорошие новости; то, что вы описали (имея существующие классы C#), является ожидаемым вариантом использования protobuf-net. Все.прото-материал ("Протоген", надстройка VS и т. д.) Были добавлены как после. Ядро протобуф-сети не знает о них и не заботится о них.
буферы протокола определяют DSL (.proto, как вы упомянули), который совместно используется между реализациями и (иногда) используется для генерации кода. Когда я впервые написал protobuf-net, генерация кода аспект не был моей самой большой проблемой-просто разработчики .NET обычно виноваты (включая меня) в "первой реализации", а не "первом контракте".
как следствие, protobuf-чистая не нужна .файлы прото для работы; приписываемого класса достаточно для однозначной сериализации / десериализации. Просто используйте Serializer.Serialize
, .Merge
и .Deserialize
(и т. д.).
что сказал, это тут включить некоторые очень недоразвитый и экспериментальный поддержка этого:
string proto = Serializer.GetProto<YourType>();
это далеко не полный, но может работать для простых типов. Если у вас есть некоторые конкретные случаи, когда он терпит неудачу, дайте мне знать (добавьте комментарий или зарегистрируйте проблему). Тем не менее, большую часть времени люди интересуются .прото напишет .прото!--15-->первый и работать оттуда.
примеры рабочих декорированных типов показаны на Домашняя страница проекта; это полностью зависит от вас, используете ли вы WCF атрибуты, атрибуты xml или атрибуты protobuf-net (хотя последние обеспечивают больший контроль над некоторыми конкретными точками сериализации, такими как наследование и числовые макеты).
до тарелочкам Марк вбегает сюда и получает массивные взлеты, позвольте мне указать protobuf.net.