2011-11-23 32 views
9

Estoy intentando serializar y deserializar un ReadOnlyCollection usando protobuf-net. Sin embargo, se produce una excepción al deserializar cuando protobuf-net intenta convertir una Lista en una ReadOnlyCollection.protobuf-net: no se puede deserializar ReadOnlyCollection

 var roc = new ReadOnlyCollection<byte>(new byte[] {1, 2, 3}); 
     var ms = new MemoryStream(); 

     Serializer.Serialize(ms, roc); 
     ms.Position = 0; 
     var roc2 = Serializer.Deserialize<ReadOnlyCollection<byte>>(ms); 

     Console.WriteLine(BitConverter.ToString(roc2.ToArray())); 

¿Hay una manera de mantener esto como un ReadOnlyCollection en lugar de serializar/deserializar como List? En la aplicación real, el ReadOnlyCollection es una parte de un objeto inmutable que deseo serializar, y preferiría mantenerlo como ReadOnlyCollection.

+0

Ooh, eso es intrigante. * en este momento * Tendría que decir simplemente "no, eso no funcionará", pero puedo pensar en algunas maneras en que podría modificarlo para que * funcione *. Sin embargo, serían cambios en el núcleo de deserialización. Es posible que desee registrar esto como una solicitud de función en protobuf-net. –

+0

He agregado un [problema] (http://code.google.com/p/protobuf-net/issues/detail?id=254) para esto y una posible solución, pero me olvidé de cambiar el tipo de problema para que sea listado como un defecto Doh! – Mark

+0

Vi. Gracias. Lo haré, pero tenga en cuenta que protobuf-net no es mi trabajo diario, por lo que podría tomar un par de días para obtener una visión adecuada de él. –

Respuesta

0

Creo que protobuf-net solo deserializa colecciones como Lista. Usted podría:

var roc2aux = Serializer.Deserialize<List<byte>>(ms); 
var roc2 = new ReadOnlyCollection<byte>(roc2aux); 
Console.WriteLine(BitConverter.ToString(roc2.ToArray())); 
Cuestiones relacionadas