2012-04-11 5 views
0

Guten Morgen serialisiert,Wie eine benutzerdefinierte Eventhandler

Ich habe eine Klasse DirObserver mit einem benutzerdefinierten Ereignis:

public EventHandler<FileDetectedEventArgs> NewFileDetected; 

Ich versuche, diese Klasse in einer anderen Klasse zu serialisiert mit:

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

Aber ich bekomme eine Ausnahme: FileDetectedEventArgs kann nicht serialisiert werden, weil es keinen parameterlosen Konstruktor hat.

Aber die FileDetectedEventArgs-Klasse haben einen parameterlosen Konstruktor:

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() { } 
} 

Dennoch ist die Ausnahme ausgelöst wird. Was ist das Problem hier?

Dank und begrüßt Thomas

Antwort

0

ändern

public EventHandler<FileDetectedEventArgs> NewFileDetected; 

zu

public event EventHandler<FileDetectedEventArgs> NewFileDetected; 
+0

Gut gemacht, vermisste das fehlende _event_ Schlüsselwort. – Maarten

1

Eventhandler werden nicht gemacht zu serialisiert werden. Wenn Sie sich die inneren Ausnahmen Ihrer Ausnahme ansehen, sehen Sie, dass es die EventHandler-Klasse ist, die keinen parameterlosen Konstruktor hat; Es ist ein Delegierter.

Wahrscheinlich möchten Sie den Eventhandler von der Serialisierung ausschließen; Fügen Sie ein XmlIgnore-Attribut hinzu.

aktualisieren

vermisste ich das fehlende Ereignis Stichwort @Reniuz erwähnt wie. Serialisierung funktioniert mit dieser Korrektur. Trotzdem ist das Serialisieren von Eventhandlern im Allgemeinen eine schlechte Idee, denke ich.

+0

Ich muss die Klasse zu XML serialisieren. Die Annotation [XmlIgnore] für das Ereignis löst das Problem – thomas