2010-11-16 13 views
15

Czy istnieje sposób na serializację słownika za pomocą buforów protokołu, czy będę musiał użyć Thrift, jeśli będę tego potrzebować?Słownik w buforach protokołów

+0

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

+1

Niezupełnie duplikat. To pytanie dotyczyło wiązań .net. OP nie określa środowiska językowego. – JesperE

Odpowiedz

28

Ludzie zazwyczaj zapisują słownik jako listę par klucz-wartość, a następnie odbudowują słownik po drugiej stronie.

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

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

Czy istnieje sposób na zrobienie tego samego z dynamicznym typem? Mam 'Dictionary ', które muszę serializować. =/Próbowałem zbadać, czy bufory protokołów mogą to zrobić bez dużego wysiłku. – mpontillo

+3

Cóż, nie. Protobuf nie jest ogólnym protokołem serializacji obiektów. Musisz zdefiniować komunikaty protobuf dla wszystkich danych, które chcesz serializować. (Szczerze mówiąc, jeśli masz map, prawdopodobnie powinieneś zacząć od refaktoryzacji swojego kodu.) – JesperE

+0

@Mike Musisz utworzyć pole dla każdego typu * może to być * * * * * to błąd, który tylko czeka na zdarzyć. –

0

Możesz sprawdzić pakiet ProtoText.

Załóżmy, że chcesz przekształcić kod w dyktafon person_dict w predefiniowany obiekt PersonBuf protobuf zdefiniowany w module .

W tym przypadku, aby korzystać ProtoText,

import ProtoText 
from personbuf_pb2 import PersonBuf 

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

Dla przyszłych poszukujących odpowiedzi, ProtoBuf now supports Maps natywnie:

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

Należy pamiętać, że Mapy nadal nie mogą się powtarzać. – mattes