2010-11-16 20 views
15

C'è un modo per serializzare un dizionario con i buffer di protocollo, o dovrò usare Thrift se ho bisogno di questo?dizionario nel buffer di protocollo

+0

duplicare http://stackoverflow.com/questions/3874024/how-does- protobuf-net-supporto-per-dizionario-KeyValuePair fabbrica –

+1

Non proprio duplicare. Quella domanda riguardava i legami .net. OP non specifica l'ambiente della lingua. – JesperE

risposta

28

La gente di solito annotare il dizionario come un elenco di coppie chiave-valore, e quindi ricostruire il dizionario all'altro capo del filo.

message Pair { 
    optional string key = 1; 
    optional string value = 2; 
} 

message Dictionary { 
    repeated Pair pairs = 1; 
} 
+1

C'è un modo per fare la stessa cosa con un tipo dinamico? Ho un 'Dictionary ' che ho bisogno di serializzare. =/Stava cercando di indagare per vedere se i buffer protocollo potrebbe fare questo senza un grande sforzo. – mpontillo

+3

Bene, no. Protobuf non è un protocollo di serializzazione di oggetti generali. È necessario definire i messaggi di protobuf per tutti i dati che si desidera serializzare. (Onestamente, se hai una map, dovresti probabilmente iniziare rifattorizzando il tuo codice.) – JesperE

+0

@Mike Dovresti creare un campo per ogni tipo che * potrebbe * essere, che è un bug che aspetta solo di accadere. –

0

È possibile controllare il pacchetto ProtoText.

Si supponga di voler serializzare un dict person_dict in un oggetto protobuf predefinito PersonBuf definito nel modulo personbuf_pb2.

In questo caso, per usare prototesto,

import ProtoText 
from personbuf_pb2 import PersonBuf 

obj = PersonBuf() 
obj.update(person_dict) 
11

Per i futuri cercatori di risposta, ProtoBuf now supports Maps nativamente:

message MapMessage 
{ 
    map<string, string> MyMap = 1; 
} 
+0

prega di notare che Mappe ancora non può essere ripetuto. – mattes

Problemi correlati