2009-07-09 14 views
14

J'essaie d'utiliser Protocol Buffers pour la sérialisation des messages.Comment coderiez-vous une carte <String, Object> en utilisant des tampons de protocole?

Mon format de message doit contenir la carte < Chaîne, Objet> entrées ... mais comment écrire la définition .proto? Pour autant que je sache, les tampons de protocole n'ont pas de type de carte intégré. Je pourrais modéliser cela en utilisant des champs répétitifs. Mais le gros problème que j'ai, c'est que vous devez définir tous vos types. Je veux que mon message soit flexible, donc je ne peux pas spécifier les types.

Des idées?

+0

Pour ce que ça vaut: il semble maintenant 'proto3' a 'maps <,>' syntaxe: https://developers.google.com/protocol-buffers/docs/proto3#maps –

Répondre

10

Je modéliserais un tuple avec une clé et une valeur (probablement un champ de valeur par type que la valeur pourrait être). Ensuite, juste une liste répétée de ce type de tuple. Vous auriez besoin de construire la carte elle-même dans le code.

Lorsque vous dites que vous ne pouvez pas spécifier les types - de quel type de types parlez-vous? Si vous avez un champ facultatif de chaque type dans le tuple, alors cela suffirait pour toutes les primitives - et vous pouvez mapper des messages en les sérialisant dans une chaîne d'octets.

Il semble que le niveau de «déstructuration» que vous avez peut ne pas convenir à PB.

+1

semble raisonnable ... mais je suppose que vous ont raison: PB ne ressemble pas à un bon ajustement pour mon problème – arturh

+2

@artuh - qu'avez-vous finalement utilisé pour votre problème? – ekeren

+0

Alors ... Des idées? –