1

おはようございます、

カスタム イベントを持つクラス DirObserver を取得しました。

public EventHandler<FileDetectedEventArgs> NewFileDetected;

このクラスを別のクラスでシリアル化しようとしました:

private XmlSerializer serializer = new XmlSerializer(typeof(List<DirObserver>));

しかし、私は例外を取得します: FileDetectedEventArgs は、パラメーターなしのコンストラクターがないため、シリアル化できません。

しかし、FileDetectedEventArgs-Class にはパラメーターのないコンストラクターがあります。

public class FileDetectedEventArgs : EventArgs
{
    public String Source { get; set; }
    public String Destination { get; set; }
    public String FullName { get; set; }

    public FileDetectedEventArgs(String source, String destination, String fullName)
    {
        this.Source = source;
        this.Destination = destination;
        this.FullName = fullName;
    }

    public FileDetectedEventArgs() { }
} 

それにもかかわらず、例外が発生します。ここで何が問題なのですか?

トーマスに感謝と挨拶

4

2 に答える 2

1

イベントハンドラはシリアル化されません。例外の内部例外を調べると、パラメーターのないコンストラクターを持たないEventHandlerクラスであることがわかります。それは代表者です。

おそらく、イベントハンドラーをシリアル化から除外する必要があります。XmlIgnore属性を追加します。

アップデート

@Reniuzが述べたように、欠落しているイベントキーワードを見逃しました。シリアル化はその修正で機能します。それでも、一般的にイベントハンドラーをシリアル化することは悪い考えだと思います。

于 2012-04-11T09:11:21.793 に答える
1

変化する

public EventHandler<FileDetectedEventArgs> NewFileDetected;

public event EventHandler<FileDetectedEventArgs> NewFileDetected;
于 2012-04-11T09:04:27.530 に答える