2012-04-11 58 views
0

早上好,如何序列化的自定义事件处理

我有一类DirObserver使用自定义事件:

public EventHandler<FileDetectedEventArgs> NewFileDetected; 

我尝试序列这个类在其他类:

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

但我得到一个异常:FileDetectedEventArgs无法序列化,因为它没有无参数的构造函数。

但FileDetectedEventArgs级有一个参数的构造函数:

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

尽管如此,将引发异常。这里有什么问题?

感谢和问候 托马斯

回答

0

变化

public EventHandler<FileDetectedEventArgs> NewFileDetected; 

public event EventHandler<FileDetectedEventArgs> NewFileDetected; 
+0

干得好,错过了_event_关键字。 – Maarten 2012-04-11 09:27:18

1

事件处理不发被序列化。如果您查看异常的内部异常,您将看到它是没有无参数构造函数的EventHandler类;它是一个代表。

您可能希望从序列化中排除事件处理程序;添加一个XmlIgnore属性。

更新

我错过了失踪事件关键字由@Reniuz提及。序列化适用于该更正。尽管如此,序列化事件处理程序通常是一个糟糕的主意,我认为。

+0

我需要序列化类到XML。该事件的[XmlIgnore]注释解决了该问题 – thomas 2012-04-11 13:17:13