2009-07-08 13 views
2

私はに格納されたクラスAのオブジェクトのコレクションをシリアル化するのにBinaryFormatterを使用しています。 [Serializable]タグを追加し、AGetObjectDataと特別なコンストラクタの両方)にISerializableを実装しました。デシリアライズすると、リストがデシリアライズされ、シリアル化されたものと同じ数の要素が含まれていることがわかります。ただし、これらの各要素はnull参照です。カスタム.NETシリアル化が機能していないようです

例外がスローされていないかどうかを確認しましたが、そうでないことを確認しています。私は、形式がA(SerializationInfo ^info, StreamingContext context)の特別なコンストラクタが、逆シリアル化中に正しい回数呼び出されていることを確認しましたが、これらの再構築されたオブジェクトはではありません。逆シリアル化されたコレクションから参照されていません。

また、System::Collections::Generic::List<A^>^array<A^>^に置き換えましたが、私はまだ同じ結果を得ています。配列には正しい数の要素がありますが、各要素はnull参照です。

同様の問題を抱えている人は誰ですか?すべての手がかりは?

+1

この種の質問には、壊れたコードが常に便利です。 –

+0

GetObjectDataメソッドでは、あなたのリストでToArray()を呼び出していますか?私は過去の間違いを犯しました。私はシリアライゼーションプロセスを熟考して、この同じ振る舞いを得ようとしました。 – Kleinux

+0

Kleinux、私はToArray()を呼び出すのではありませんが、それがうまくいくかどうかを一度試しました。そのような運はありません。 –

答えて

3

問題は、GetValue呼び出しの直後に子オブジェクト内で参照されるオブジェクトが完全に非直列化される必要はないということでした。私の場合、汎用のListはまだ完全に非直列化されていないので、null参照のみが含まれていました。オブジェクトグラフが完全に逆シリアル化された後で、最後にIDeserializationCallbackを使用してコードを実行しました。

0

あなたの説明から、あなたのリスト内のアイテムはおそらくシリアル化されていない可能性があります。あなたがそのクラスを制御できれば、それもシリアライザブルとしてタグ付けされているかどうかを確認できますか?

また、XmlFormatterを使用してシリアル化されたデータを視覚的にチェックして、ビルドの方法を確認してみましたか?シリアライゼーションまたはデシリアライズ中に問題が発生しているかどうかについての洞察が得られます。

+0

私はシリアル化しようとしているクラスを制御できます。これは[Serializable]としてタグ付けされ、参照するシングルトンを処理するためにISerializableも実装しています。 –

+0

私はSoapFormatter(XmlFormatterクラスを見つけることができませんでした...あなたがSoapを意味すると仮定した)と私はこれを取得します:SoapシリアライザはGeneric Typesのシリアル化をサポートしていません –

+0

Err、yeah ... XmlFormatterではなく、System.Xml.SerializationのXmlSerializerの説明 – STW

関連する問題