Возможно ли сериализовать класс на C++ и десериализовать его на аналогичный класс в C#, используя буфер протокола? Я пробовал сериализацию Json для решения этой проблемы с сериализацией на разных платформах, но у нее есть проблемы с некоторыми типами данных, такими как список массивов и т. Д. Итак, какие-либо рекомендации по использованию буфера протокола Google?Протокол Buffer to Serialize C++ и и десериализовать до класса C#
ответ
Буферы протоколов позволят вам описать структуру данных и сериализовать/десериализовать их на объекты на C++, Java, C# и других платформах. У вас нет (как правило, в любом случае), чтобы получить возможность сериализации экземпляров ваших собственных классов - вы сериализуете экземпляры сгенерированных классов. (Я знаю, что protobuf-net позволяет вам украшать ваши собственные классы атрибутами, описывающими их сериализацию в буферах протокола, вместо того, чтобы использовать сгенерированные классы. Я не знаю, было ли это сделано на C++.)
Неясно, действительно ли это соответствует вашим требованиям, но protobufs, безусловно, позволяют использовать межплатформенный обмен данными. У этого есть ограничения в отношении того, какие данные могут быть сериализованы - все это достаточно примитивно, и вы создаете более сложные структуры из примитивных. Это может быть неприятно, если вы уже получили свою модель данных в коде, а затем должны переопределить ее в буферах протоколов, но она работает ...
Спасибо. На стороне C# у меня уже есть моя модель данных. Но я могу сделать несколько изменений на уровне сериализации. Но все же я думаю, что я буду жестко относиться к таким типам, как словарь, список массивов, ete. Спасибо много для комментариев – Navin
@Navin: Ну, вам просто нужно смоделировать их соответствующим образом. Именно то, как вы структурируете свое приложение (например, используете ли вы только прото-классы на границах сериализации или по всему вашему коду) зависит от вас. –