64 votes

Comment choisir entre protobuf-csharp-port et protobuf-net

J'ai récemment eu à chercher un C# portage du Protocole de Tampons de bibliothèque à l'origine développé par Google. Et devinez quoi, j'ai trouvé deux projets appartenant à la fois par les deux très bien connu des personnes ici: protobuf-csharp-port, écrit par Jon Skeet et protobuf-net, écrit par Marc Gravel. Ma question est simple: lequel dois-je choisir ?

J'aime bien Marc solution car il me semble plus proche de C# philisophy (par exemple, vous pouvez simplement ajouter des attributs aux propriétés de la classe existante) et il semble qu'il peut prendre en charge .NET des types intégrés comme Système.Guid.

Je suis sûr que les deux d'entre eux sont vraiment de grands projets, mais quel est votre oppinion?

57voto

Marc Gravell Points 482669

Je suis d'accord avec Jon points; si vous êtes le codage sur plusieurs environnements, puis de sa version vous donne une API similaire à l'autre "de base" des implémentations. protobuf-net est beaucoup plus semblable à la façon dont la plupart de la .NET sérialiseurs sont mis en œuvre, est plus familier (OMI).NET développeurs. Et que Jon notes - les données binaires brutes de sortie doit être identique, de sorte que vous pouvez ré-implémenter une API différente si vous en avez besoin plus tard.

Certains points de re protobuf-net qui sont spécifiques à cette mise en œuvre:

  • fonctionne avec existant types (et pas seulement les types générés à partir .proto)
  • travaux en vertu de choses comme la WCF et memcached
  • peut être utilisé pour implémenter ISerializable pour les types existants
  • prend en charge l'héritage* et la sérialisation des méthodes de rappel
  • prend en charge les motifs tels que ShouldSerialize[name]
  • œuvres existantes décorées types (XmlType/XmlElement ou DataContract/DataMember) - sens (par exemple) que LINQ-to-SQL modèles de sérialiser out-of-the-box (tant que la sérialisation est activée dans le DBML)
  • dans la v2, travaille pour les types POCO sans attributs
  • dans la v2, travaille en .NET 1.1 (pas sûr que c'est un énorme atout) et la plupart des autres cadres (y compris monotouch - yay!!!)
  • éventuellement (pas encore implémenté) v2 pourrait soutenir le plein-graph* sérialisation (et pas seulement des arbres de sérialisation)

(*=ces fonctionnalités utilisent 100% valide protobuf binaire, mais qui pourrait être difficile à consommer d'autres langues)

40voto

Jon Skeet Points 692016

Utilisez-vous d'autres langues dans votre projet? Si oui, mon C# port vous permettra d'écrire du code similaire sur toutes les plateformes. Sinon, le Marc de port est probablement plus idiomatiques C# pour commencer. (J'ai essayé de faire de mon code "sentir" comme normal C#, mais le design est clairement basé sur le code Java pour commencer, délibérément, de sorte qu'il est familier ceux qui utilisent Java).

Bien sûr, l'une des beautés de cette est que vous pouvez changer d'avis plus tard et être sûr que toutes vos données seront toujours en vigueur via les autres, ils doivent être tout à fait compatible binaire (en termes de données sérialisées), pour autant que je suis au courant.

6voto

Nick Points 7464

Je viens de passer de protobuf-csharp-port à protobuf-net parce que:

  • protobuf-net ressemble davantage à ".net like", c'est-à-dire aux descripteurs de sérialiser les membres au lieu de générer du code.
  • Si vous voulez compiler des fichiers .proto protobuf-csharp-port, vous devez effectuer un processus en 2 étapes, c’est-à-dire compiler avec un protocole en .protobin puis compiler cela avec protoGen. protobuf-net le fait en une étape.

3voto

juanagui Points 449

Dans mon cas, je souhaite utiliser des tampons de protocole pour remplacer un modèle de communication basé sur XML entre un client .net et un back-end j2ee. Étant donné que j'utilise déjà la génération de code, je vais me tourner vers l'implémentation de Jon

Pour les projets ne nécessitant pas d'interopérabilité Java, je choisirais l'implémentation de Marc, d'autant plus que la v2 permet de travailler sans annotations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X