2011-11-14 4 views
4

うまくいけば、私は正しく私の質問をしています。特定のオブジェクト(私は標準[Serializableを]属性を使用して慣れてる)PublicKeyTokenをクラスに解決するにはどうすればよいですか? (シリアル化の問題)

タイプ 「System.Runtime.Serialization.SerializationExceptionの最初のチャンス例外をシリアル化しようとしたときに、私は次の例外を取得しています「 がmscorlib.dllで

発生しました追加情報:型 '' で組立 'System.ComponentModel.Componentシステム、バージョン= 4.0.0.0、文化=中立、 なPublicKeyToken = b77a5c561934e089' がシリアル化可能としてマークされていません。

どこから来たのかわかりません。私のクラスはComponentから継承しません。

私は、[NonSerialized]としてすべてのdelegate \ member varialbeをマークしていますが、それでもシリアル化しようとするたびにこの例外がスローされています。

私はこのPublicKeyTokenを使用して、正確なクラス\メンバーがシリアル化しようとしているものを見つけることができますか?

+0

おそらく、どのタイプもComponentから継承していませんが、そのうちの1つはComponentから継承するタイプのフィールドを持っていますか? Componentを参照している_something_が必要です。そうしないと、シリアライザの重大なバグを指摘します。 ;-) –

答えて

4

私はをカウントするには、この何回も見たことに基づいて推測あげる:あなたはeventを持って、そしてあなたには、いくつかのUIのコードまたは関連する他の何かComponentにそのイベントから購読しているが。

BinaryFormatterを使用すると、イベント(またはバッキングフィールド)がシリアル化されます。私は私は本当に何か他のものを使用することをお勧めしBinaryFormatterを使用した場合そう多く(IMO、主観)悪いことが起こることにも注意しましょう

[field:NonSerialized] 
public event EventHandler SomethingHappened; 

:あなたはこれをしたくない場合は、あなたのイベントがマークされていることを確認。例えば、XmlSerializerは、かなりの量のオープンソースのバイナリフォーマッタが利用可能であることについては聞き取れないものです。

+0

あなたは神様です。これはソリューションの半分であり、これを組み合わせたものであり、シリアル化の前にオブジェクトを複製することで、オブジェクトのシリアル化が可能になりました。そのアイテムが縛られていたという事実には何かがあったと思う。助けてくれてありがとう。 – greggorob64

1

いいえ、PublicKeyは問題を見つけるのに役立ちません。 PublicKeyTokenはアセンブリに署名するために使用されたキーで、このキーは複数のCLRアセンブリで使用されます。

問題が消えるまで、シリアル化するオブジェクトのトリミングを開始します。また、 "マイコード"(ツール - >オプション - >デバッグ)をオフにして、すべての例外を壊すようにしてください。が最初に失敗する場所を少し考えてください。

+0

私はそれらのいくつかのオプションを試してみて、トリミングを開始します。 私たちのアプリのための「コア」データオブジェクトのような非常に時間がかかりそうになると、あなたは何をしなくてはならないのでしょうか... – greggorob64

関連する問題