3

データテーブルの形式でクラスオブジェクトのリストを表示するためのデバッガビジュアライザーが1つあります。ただし、コードの制限は、クラスがシリアル化可能である必要があることです。つまり、[Serializable]としてマークされている必要があり、クラスがSerializableとマークされていない場合、デバッガーがクラッシュします。したがって、クラスがSerializableとマークされていない場合、実行時にクラスをSerializableにする方法を教えてもらえますか?

4

5 に答える 5

3

実行時に既存のクラスのメタデータを変更することはできません。

于 2010-03-17T10:34:34.707 に答える
2

public get/setプロパティを持つクラスはすべてXmlSerializableです。代わりにXMLシリアライザーを使用できますか?

于 2010-03-17T10:37:10.253 に答える
2

クラスがマークされていない場合は、 SerializationSurrogate[Serializable]を使用してシリアル化を試すことができます

于 2010-03-31T21:27:43.800 に答える
2

クラスに [Serializable] がないという事実は、2 つの方法で説明できます。それは省略のエラーである可能性があり、より一般的なケースです。または、クラスがシリアライゼーションをサポートしていない可能性があります。これは珍しいことではありませんが、クラスは、グローバルなプログラムの状態に依存するため、逆シリアル化時に忠実に再現できない状態に依存することがよくあります。Windows フォーム コントロールのいずれかが良い例です。必要な状態にあるネイティブ Windows ウィンドウがなければ逆シリアル化することはできません。この状態では、多くの場合、他のウィンドウも作成する必要があります (コンテナー ウィンドウなど)。多くのメッセージ。

まあ、これはビジュアライザーの実装には役立ちません。シリアル化で確実に実装することはできません。ただし、リフレクションを使用すると、同じプロパティとフィールド値にアクセスできます。リフレクションは常にサポートされています。

于 2010-03-17T12:32:28.950 に答える
1

[Serializable] を使用すると、dotnet ライブラリを使用して json、xml などにシリアル化できます。基本的にほぼすべてのデータ構造をxml または json 形式。

[Serializable] をクラスに追加することは、Bill Wagner の著書『Effective C#: 50 specific ways to Improvement your C# 』のベスト プラクティスのヒントの 1 つです。

@Darin (+1) が指摘したように、[Serializable] でなくてもクラスをシリアル化できます。クラスをさかのぼって再装飾することはできません。私があなただったら、[Serializable] に入れます。これを回避することは、努力する価値がないからです。

于 2010-03-17T10:47:02.587 に答える