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

改变

public EventHandler<FileDetectedEventArgs> NewFileDetected;

public event EventHandler<FileDetectedEventArgs> NewFileDetected;
于 2012-04-11T09:04:27.530 回答
1

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

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

更新

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

于 2012-04-11T09:11:21.793 回答