Буфер протокола для сериализации C++ и десериализации в класс C#

Можно ли сериализовать класс на С++ и десериализовать его в аналогичный класс на С#, используя буфер протокола? Я пробовал сериализацию Json, чтобы преодолеть эту проблему сериализации на разных платформах, но у нее есть проблемы с некоторыми типами данных, такими как список массивов и т. Д. Итак, какие-либо советы по использованию буфера протокола Google?


person Navin    schedule 25.10.2012    source источник


Ответы (1)


Буферы протоколов позволят вам описать структуру данных и сериализовать/десериализовать ее в объекты на C++, Java, C# и других платформах. Вы не сериализуете (во всяком случае, как правило) экземпляры ваших собственных классов — вы сериализуете экземпляры сгенерированных классов. (Я знаю, что protobuf-net позволяет вам украшать ваши собственные классы атрибутами, описывающими, как сериализовать их в буферы протокола, вместо того, чтобы использовать сгенерированные классы. Я не знаю, было ли это сделано в C++.)

Неясно, действительно ли это соответствует вашим требованиям, но protobufs, безусловно, позволяют осуществлять межплатформенный обмен данными. У него есть ограничения с точки зрения того, какие данные могут быть сериализованы — все это достаточно примитивно, и вы создаете более сложные структуры из примитивных. Это может разочаровать, если у вас уже есть модель данных в коде, а затем вам нужно повторно реализовать ее в буферах протокола, но это работает...

person Jon Skeet    schedule 25.10.2012
comment
Спасибо. На стороне С# у меня уже есть моя модель данных... но я могу внести несколько изменений в уровень сериализации... но все же я думаю, что мне будет сложно, когда дело доходит до таких типов, как словарь, список массивов и т. д. Спасибо много для комментариев - person Navin; 25.10.2012
comment
@Navin: Ну, вам просто нужно смоделировать их соответствующим образом. Как именно вы структурируете свое приложение (например, используете ли вы прото-классы только на границах сериализации или во всем коде), зависит от вас. - person Jon Skeet; 25.10.2012