2011-01-18 2 views
7

На данный момент есть два прото BUF библиотек для .NET:разница в буфере .NET Протокол библиотек

http://code.google.com/p/protobuf-csharp-port/ С Jon тарелочкам как владелец http://code.google.com/p/protobuf-net/ с Марком Gravell как владелец

Что такое разница между ними? Оба кодируются с той же спецификацией, что и в спецификации Google? Есть ли различия?

Причина, по которой я спрашиваю, заключается в том, что в настоящее время у нас есть proto buf interop между службами, использующими библиотеки Java и потенциально C++, и мы хотим, чтобы мы избегали каких-либо проблем или случаев с краями.

ответ

11

Версия Jon's в значительной степени представляет собой порт версии Java, поэтому имеет очень похожий подход к API и дизайну. Это также AFAIK полностью контракт-первый, то есть от .proto.

Моя версия приходит на это больше с точки зрения .NET, глядя на то, что распространено в .NET-сериализаторах - такие изменчивые объекты, модифицируются существующими типами, сначала кодовыми (хотя это может все еще делает код-gen из .proto, если хотите) и т. д. Он может даже вывести данные из атрибутов, используемых XmlSerializer, и DataContractSerializer для совместной работы с существующим кодом и может подключаться как к удаленному (через ISerializable), так и к WCF (через атрибуты или конфигурации). Таким образом, он глубоко внедрен в экосистему .NET. Я также включаю поддержку наследования (так как это так распространено в других сериализаторах .NET), но это немного нереально, чтобы сопоставить другие платформы, поскольку он не имеет прямого представления в .proto.

Бинарные данные должны быть идентичными; это в значительной степени точка формата; p Это в значительной степени выбор того, какой API может быть более подходящим для вас.

Для ваших нужд, работая бок о бок с C++ и Java-кодом в той же системе и с существующими определениями .proto, я предлагаю вам вариант Jon's, наиболее подходящий для вас.

Если, однако, вы делаете .NET только или делают .NET с Interop с внешнего кода (т.е. не все равно, что язык «другая сторона» использует, так как у вас есть только беспокоиться о своем собственном коде), то IMO protobuf-net может быть довольно безболезненным способом потребления данных; особенно, если у вас есть существующая система, которую теперь вы хотите сериализовать (или: сериализовать быстрее/меньше).

+1

Спасибо Marc. Мы использовали вашу версию с первого дня, но искали некоторые пояснения, особенно, когда все больше команд начали использовать библиотеки. –

+0

@ Ray затем продолжайте использовать его и наслаждайтесь; p –