2011-11-23 9 views
9

Próbuję serializować i deserializować ReadOnlyCollection przy użyciu protobuf-net. Jednak wyjątek jest generowany podczas deserializacji, gdy protobuf-net próbuje umieścić listę w ReadOnlyCollection.protobuf-net: Nie można deserializować 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())); 

Czy istnieje sposób, aby zachować to jako ReadOnlyCollection zamiast szeregowania/deserializacji jako List? W rzeczywistej aplikacji, ReadOnlyCollection jest częścią niezmiennego obiektu, który chcę przekształcić do postaci szeregowej, i wolałbym zachować go jako ReadOnlyCollection.

+0

Ooh, to intrygujące. * właśnie teraz * Chciałbym powiedzieć po prostu "nie, to nie zadziała", ale mogę wymyślić kilka sposobów, w jakie mogę go ulepszyć, aby * działało *. Byłoby to jednak zmiana w rdzeniu deserializacji. Możesz to zarejestrować jako żądanie funkcji na protobuf-net. –

+0

Dodałem [wydanie] (http://code.google.com/p/protobuf-net/issues/detail?id=254) do tego i możliwą poprawkę, ale zapomniałem zmienić typ problemu, aby wymienione jako wada. Doh! – Mark

+0

Widziałem. Dzięki. Dołożę do tego, ale proszę pamiętać, że protobuf-net nie jest moją codzienną pracą - więc może to potrwać kilka dni, zanim się na to poprawi. –

Odpowiedz

0

Myślę, że protobuf-net deserializuje kolekcje tylko jako List. Można:

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