のフォームをシリアル化しようとします。このクラスのみがINotifyPropertyChanged
です。にBinaryFormatterは、私は次のようになりますDTOクラスを持っている代わりに、オブジェクト
public static bool IsEqual<T>(this T object1, T object2)
{
byte[] array1 = object1.ToByteArray();
byte[] array2 = object2.ToByteArray();
return array1.SequenceEqual(array2);
}
上記の方法は問題なく全アプリ全体で使用されている:
Iはまた、(複雑なオブジェクト・グラフとすることができる)2つのオブジェクトを比較する一般的な延長部を有します。しかし、この1つの特定のクラスに、私は次の例外を取得しています:
タイプ「MyProject.MyForm集会で「MyProjectと、バージョン= 1.0.0.0、カルチャニュートラル、PublicKeyToken = = null」がマークされていません直列化可能として
私のコードをチェックして再確認しました。フォームにエクステンションを渡している場所がありません。
フォームをシリアル化したくありません。私はオブジェクトを直列化したい(これは、他のすべてのフォームと同様に、フォーム自体のローカル変数です)。また、上記の拡張機能をデバッグすると、両方のパラメータが同じで、予想される型であることがわかります。
これはINotifyPropertyChanged
を実装する唯一のクラスであるため、このインターフェイスに問題はありますか?
MyProject.MyFormに手動シリアライザを追加し、シリアライズ可能とマークし、手動シリアライザにブレークポイントを設定して、そのオブジェクトをシリアル化しようとするトリガを確認できますか? (「ISerializableを使用したカスタムシリアル化」 - http://kb4dev.com/tutorial/.net-framework-classes-using-csharp/binary-serializer - 例) –
ああ、おそらくMyFormはプロパティ変更イベントに登録されていますHans氏のように、シリアライズされたイベント加入者の内部リストにも存在します。 – Evk
@HansPassantイベントの[NonSerialized]は、フィールド宣言でのみ有効であるというコンパイラエラーを示します。また、私はこのクラスでのみ変更されたプロパティを実装する必要があります。通常私のDTOは本当にPOCOです。 –