Вы уверены, что хотите использовать ProtoBuf? Сначала вы можете использовать Json, а затем переключиться на Bson или MessagePack в двоичном формате.
Комбинация Json / Bson имеет то преимущество, что вы можете использовать для них одну и ту же библиотеку (Json.net). Я считаю, что Bson немного больше, чем ProtoBuf. * 1003 *
Или вы можете использовать Json / MessagePack. Технически MessagePack является лучшим двоичным форматом, чем Bson / ProtoBuf IMO. Но поддержка инструментов хуже, и вам понадобится отдельная библиотека для Json и MessagePack. Он поддерживает все, что делает Json и даже больше (в частности, он может использовать как строковые, так и целочисленные ключи в словарях).
Быстрое сравнение MsgPack и ProtoBuf:
- Результирующий размер данных при использовании аналогичных конструкций представляется сопоставимым.
- Производительность кодирования / декодирования во многом зависит от реализации, но я ожидаю, что она будет примерно такой же величины
- MsgPack более самоописан. , В ProtoBuf вы даже не видите, является ли что-то под-сообщением или каплей.
- MsgPack поддерживает нецелочисленные ключи в словаре. Это позволяет сохранять свойства по именам, когда вам не важен размер, и переключаться на целые числа, где выигрыш велик.
- MsgPack хранит количество элементов вместо размера для массивов / словарей. Преимущество этого заключается в том, что вам не нужно постоянно возвращаться к выходным данным и подгонять их по размеру, что облегчает написание сериализатора и, возможно, обеспечивает более высокую скорость записи. С другой стороны, вы не можете легко пропустить элемент, потому что вы не знаете его размера.
- MsgPack естественным образом поддерживает расширенный набор Json, поэтому вы можете легко перейти с Json.
- Поддержка инструментов, документация и популярность намного лучше с ProtoBuf. В частности, ProtoBuf.net выглядит лучше, чем код C #, доступный для MsgPack.