2010-11-16 5 views
15

Gibt es eine Möglichkeit, ein Wörterbuch mit Protokollpuffern zu serialisieren, oder muss ich Thrift verwenden, wenn ich das brauche?Wörterbuch in Protokollpuffern

+0

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

+1

Nicht wirklich duplizieren. Diese Frage handelte von den .net-Bindings. OP spezifiziert keine Sprachumgebung. – JesperE

Antwort

28

Die Benutzer schreiben das Wörterbuch normalerweise als eine Liste von Schlüssel/Wert-Paaren auf und erstellen das Wörterbuch am anderen Ende neu.

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

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

Gibt es eine Möglichkeit, das Gleiche mit einem dynamischen Typ zu tun? Ich habe eine 'Dictionary ', die ich serialisieren muss. =/Versuchte zu untersuchen, ob Protokollpuffer dies ohne großen Aufwand tun können. – mpontillo

+3

Nun, nein. Protobuf ist kein allgemeines Objektserialisierungsprotokoll. Sie müssen Protobuf-Nachrichten für alle Daten definieren, die Sie serialisieren möchten. (Ehrlich gesagt, wenn Sie eine map haben, sollten Sie wahrscheinlich Ihren Code umstrukturieren.) – JesperE

+0

@Mike Sie müssten ein Feld für jeden Typ erstellen, der * sein * könnte, auf den ein Fehler wartet geschehen. –

0

Sie können das Paket ProtoText überprüfen.

Angenommen, Sie möchten ein Diktat person_dict in ein vordefiniertes PersonBuf protobuf-Objekt serialisieren, das im personbuf_pb2-Modul definiert ist.

In diesem Fall Proto zu verwenden,

import ProtoText 
from personbuf_pb2 import PersonBuf 

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

Für zukünftige Antwort Suchende, ProtoBuf now supports Maps nativ:

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

Bitte beachten Sie, dass Karten immer noch nicht wiederholt werden können. – mattes