2010-11-16 15 views
15

¿Hay alguna forma de serializar un diccionario utilizando búferes de protocolo, o tendré que usar Thrift si lo necesito?Diccionario en búferes de protocolo

+0

duplicar http://stackoverflow.com/questions/3874024/how-does- protobuf-net-support-for-dictionary-keyvaluepair-works –

+1

No realmente duplicado. Esa pregunta fue sobre los enlaces .net. OP no especifica el entorno del lenguaje. – JesperE

Respuesta

28

Normalmente, las personas escriben el diccionario como una lista de pares clave-valor y luego reconstruyen el diccionario en el otro extremo.

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

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

¿Hay alguna manera de hacer lo mismo con un tipo dinámico? Tengo un 'Diccionario ' que necesito serializar. =/Intentaba investigar para ver si los búferes de protocolo podían hacer esto sin un gran esfuerzo. – mpontillo

+3

Bueno, no. Protobuf no es un protocolo de serialización de objetos general. Debe definir los mensajes protobuf para todos los datos que desea serializar. (Honestamente, si tienes un mapa de , probablemente deberías comenzar refacturando tu código.) – JesperE

+0

@Mike Tendrás que crear un campo para cada tipo que * podría * ser, que es un error a la espera de ocurrir. –

0

Puede consultar el paquete ProtoText.

Suponga que desea serializar un dict person_dict a un objeto protobuf predefinido PersonBuf definido en el módulo personbuf_pb2.

En este caso, utilizar prototexto,

import ProtoText 
from personbuf_pb2 import PersonBuf 

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

Para los futuros solicitantes de respuesta, ProtoBuf now supports Maps forma nativa:

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

Tenga en cuenta que Maps aún no se puede repetir. – mattes

Cuestiones relacionadas