2011-11-23 12 views
9

私はReadOnlyCollectionをprotobuf-netを使用してシリアル化および逆シリアル化しようとしています。しかし、protobuf-netがListをReadOnlyCollectionにキャストしようとすると、直列化解除時に例外がスローされます。protobuf-net: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())); 

ReadOnlyCollectionとして、これを維持するのではなくListとして/デシリアライズをシリアライズする方法はありますか?実際のアプリケーションでは、ReadOnlyCollectionは、シリアル化したい不変オブジェクトの一部であり、ReadOnlyCollectionのままにしておくことをお勧めします。

+0

おっと、それは興味深いです。 *今すぐ*私は単に「それはうまくいきません」と言わなければならないでしょうが、それを調整して*動作させる方法はいくつか考えられます。しかし、デシリアライゼーションのコアに変更があります。これをprotobuf-netの機能要求として記録することもできます。 –

+0

これと修正のために[問題](http://code.google.com/p/protobuf-net/issues/detail?id=254)を追加しましたが、問題の種類を変更するのを忘れました欠陥として列挙されている。ドー! – Mark

+0

私は見た。ありがとう。私はそれに着きますが、protobuf-netは私の仕事ではないことを覚えておいてください - それで、それを適切に見るためには数日かかるかもしれません。 –

答えて

0

私は、protobuf-netがコレクションをリストとしてデシリアライズするだけだと思います。 あなたは可能です:

var roc2aux = Serializer.Deserialize<List<byte>>(ms); 
var roc2 = new ReadOnlyCollection<byte>(roc2aux); 
Console.WriteLine(BitConverter.ToString(roc2.ToArray())); 
関連する問題