2011-11-23 8 views
9

Sto provando a serializzare e deserializzare uno ReadOnlyCollection utilizzando protobuf-net. Tuttavia, viene lanciata un'eccezione alla deserializzazione quando protobuf-net tenta di lanciare una lista in una raccolta ReadOnlyCollection.protobuf-net: Impossibile deserializzare 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())); 

C'è un modo per mantenere questo come un ReadOnlyCollection piuttosto che la serializzazione/deserializzazione come List? Nell'applicazione effettiva, lo ReadOnlyCollection fa parte di un oggetto immutabile che desidero serializzare e preferirei mantenerlo come ReadOnlyCollection.

+0

Ooh, è intrigante. * in questo momento * Dovrei semplicemente dire "no, non funzionerà", ma posso pensare ad alcuni modi in cui potrei modificarlo per * far funzionare *. Sarebbe tuttavia un cambiamento nel nucleo di deserializzazione. Si potrebbe voler registrare questo come richiesta di funzionalità su protobuf-net. –

+0

Ho aggiunto un [problema] (http://code.google.com/p/protobuf-net/issues/detail?id=254) per questo e una possibile correzione, ma ho dimenticato di cambiare il tipo di problema in modo che sia elencato come un difetto. Doh! – Mark

+0

Ho visto. Grazie. Ci arriverò, ma tieni a mente che protobuf-net non è il mio lavoro giornaliero, quindi potrebbero volerci un paio di giorni per dargli un'occhiata. –

risposta

0

Penso che protobuf-net deserializzi solo le raccolte come Elenco. È possibile:

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