2012-06-05 11 views
8

Sono nuovo per i buffer del protocollo e sto usando protobuf-net per VS2010. da quello che sto leggendo qui Dictionary in protocol buffers, non sembra che protobuf possa serializzare un dizionario con tipi di oggetto come valori. ma qui sul suo sito ho letto questo:Buffer di protocollo C# .net - supporto protobuf-net per serializzare il dizionario dei valori degli oggetti?

Note sui tipi

supportati:

classi personalizzate che: sono contrassegnati come dati-contratto ha un costruttore senza parametri per Silverlight: sono pubblici molti comuni primitive ecc matrici a singola dimensione: T [] Lista/IList Dizionario/IDictionary qualsiasi tipo che implementa IEnumerable e ha un metodo Add (T) Il codice assume che i tipi saranno mutabili attorno ai membri eletti. Di conseguenza, le strutture personalizzate non sono supportate, poiché dovrebbero essere immutabili.

che sembra supportato.

posso compilare correttamente un elenco di oggetti in questo modo:

message ValuesObject { 
    optional int32 SomeVal = 1; 
    repeated SomeClass ListOfSomeClassTypes = 2; 
} 

Questo funziona bene per un List<SomeClass>. Perché non posso serializzare usando protobuf-net a Dictionary<int, SomeClass>? Come apparirebbe il messaggio per serializzare uno Dictionary<int, SomeClass>?

risposta

9

A Dictionary<int,SomeClass> è perfettamente serailizable con protobuf-net. Protobuf-net funziona più semplice quando si lavora con codice, quindi: * basta avere un Dictionary<int,SomeClass> nel proprio modello. Non è necessario utilizzare .proto per tutti - che viene fornito principalmente per scopi cross-platform. La specifica Proto non ha il concetto di un dizionario, ma se si sono tenuti di utilizzare uno schema Proto, allora questo viene serializzato come:

message KeyValuePairInt32SomeClass { 
    required int32 Key = 1; 
    required SomeClass Value = 2; 
} 

con il dizionario come

repeated KeyValuePairInt32SomeClass YourDictionary = [n]; 
Problemi correlati