2009-12-28 6 views
3

Je regarde protobuf-net pour implémenter différents formats de messagerie, et j'aime particulièrement l'approche basée sur le contrat car je n'ai pas à jouer avec le compilateur proto. une chose que je ne pouvais pas vraiment trouver de l'information est, cela rend-il difficile de travailler sur plusieurs plates-formes? il y a quelques applications C++ qui devraient être capables d'analyser les données PB, et même si je comprends que protobuf-net sérialise au format standard PB, si j'utilise l'approche contractuelle et non un fichier proto, comment le côté C++ analyse-t-il? les données?protobuf-net communiquant avec C++

peut (devrait?) J'écris un fichier proto séparé pour le (très peu) cas où C++ a besoin de comprendre les données? et si oui, comment puis-je savoir exactement que la classe C++ générée à partir du fichier proto va correspondre aux données du côté C# sans proto-fichier?

Répondre

1

Oui, en théorie au moins, ils devraient correspondre au niveau binaire, mais vous pouvez vous limiter aux types qui correspondent simplement à ".proto" - évitez donc des choses comme DateTime, l'héritage ([ProtoInclude]), etc. a également l'avantage que vous devriez être en mesure d'utiliser:

string proto = Serializer.GetProto<YourType>(); 

pour obtenir le .proto; il (GetProto) n'est pas 100%, mais il fonctionne pour les types de base. Mais finalement, la réponse est "tester et peaufiner"; peut-être concevoir pour interop dès le début - c'est-à-dire tester tôt.