2012-06-05 21 views
8

soy nuevo en los búferes de protocolo y estoy usando protobuf-net para VS2010. de lo que estoy leyendo aquí Dictionary in protocol buffers, no parece que protobuf pueda serializar un diccionario con tipos de objetos como valores. pero aquí en su sitio leí esto:Buffers de protocolo C# .net - ¿soporte protobuf-net para serializar diccionario de valores de objeto?

Notas sobre los tipos

soportados:

clases personalizadas que: se marcan como técnica de contrato tiene un constructor sin parámetros para Silverlight: son públicos muchos común primitivas, etc. matrices de una sola dimensión: T [] List/IList Dictionary/IDictionary cualquier tipo que implemente IEnumerable y tenga un método Add (T) El código asume que los tipos serán mutables alrededor de los miembros elegidos. En consecuencia, las estructuras personalizadas no son compatibles, ya que deben ser inmutables.

que parece que es compatible.

puedo compilar correctamente una lista de objetos de este modo:

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

Esto funciona bien para un List<SomeClass>. ¿Por qué no puedo serializar usando protobuf-net a Dictionary<int, SomeClass>? ¿Cómo se vería el mensaje para serializar un Dictionary<int, SomeClass>?

Respuesta

9

A Dictionary<int,SomeClass> es perfectamente serailizable con protobuf-net. Protobuf-net funciona más simple cuando se trabaja con código primero, así que: * solo tiene un Dictionary<int,SomeClass> en su modelo. No es necesario que utilice un .proto en total, que se proporciona principalmente con fines multiplataforma. La especificación .proto no tiene el concepto de un diccionario, pero si es necesario utilizar un esquema .proto, entonces esto es de serie como:

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

con el diccionario como

repeated KeyValuePairInt32SomeClass YourDictionary = [n]; 
Cuestiones relacionadas