Google protobuf - отличный протокол для сериализации объектов, но он поддерживает сериализацию деревьев, а не графики (отсутствие полного отслеживания ссылок на объекты).
В .NET существует небольшая реализация идеи Google. (т.е. protobuf-csharp-port, или protosharp), но наиболее интересным является protobuf-net.
Protobuf-net лучше, потому что его архитектура подходит для .NET-мира, а имеет несколько надстроек (не всегда совместимых с оригинальными protobuf, но очень полезными).
Одной из этих надстроек является возможность включения эталонного отслеживания (опция AsReference), которая позволяет сериализовать сложные графики даже с циклами.
Ненужный Protobuf-net v2 находится в бета-версии, а параметр AsReference не работает в реальных сценариях. (без этой опции все работает хорошо, но без ссылки Tracikng protobuf-net не может сериализовать графики и не является более привлекательным сериализатором).
У него все еще есть некоторые ошибки:
Итак, я не могу использовать этот отличный инструмент, и я ищу альтернативный сериализатор, который:
- по крайней мере, так же быстро, и производит небольшой результат как protobuf
- легко адаптировать к текущему проекту, например protobuf-net
- позволяет сериализовать график, например DataContractSerializer, с PreserveObjectReferences, установленным в true
- стабилен не только для простых объектов, но и для сложных сценариев реального мира.