2012-04-11 6 views
0

Доброго утра,Как сериализовать обычай EventHandler

я получил класс 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

1

Eventhandlers не сделали для сериализации. Если вы посмотрите на внутренние исключения своего исключения, вы увидите, что это класс EventHandler, у которого нет конструктора без параметров; это делегат.

Возможно, вы хотите исключить обработчик событий из сериализации; добавьте атрибут XmlIgnore.

Update

Я пропустил недостающую событие ключевое слово, как упомянуто @Reniuz. Сериализация работает с этой коррекцией. Тем не менее, сериализация обработчиков событий в целом - плохая идея, я думаю.

+0

Мне нужно сериализовать класс в xml. Аннотации [XmlIgnore] для события решают проблему – thomas

Смежные вопросы