如何序列化自定义EventHandler

时间:2012-04-11 08:41:39

标签: c# events xml-serialization

早上好,

我有一个带有自定义事件的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() { }
} 

然而,会引发例外。问题是什么?

谢谢和问候 托马斯

2 个答案:

答案 0 :(得分:1)

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

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

更新

我错过了@Reniuz提到的缺少的事件关键字。序列化适用于该更正。不过,我认为序列化事件处理程序一般都是个坏主意。

答案 1 :(得分:0)

更改

public EventHandler<FileDetectedEventArgs> NewFileDetected;

public event EventHandler<FileDetectedEventArgs> NewFileDetected;