由于一个事件处理程序,我的类序列化失败了

时间:2010-10-20 15:42:19

标签: c# serialization event-handling

我没想到会遇到这个错误。我想我在其他地方做错了。

我有一个MVVM应用程序。

我的模型可以使用BinaryFormatter序列化自己。这很好。

今天我在一个事件处理程序中添加了我的模型,包含模型的viewmodel订阅了这个事件。

现在,当我尝试序列化模型时,我收到错误,因为我的viewmodel不可序列化(按设计)。

我确信这取决于对该事件的订阅,因为我已经删除了订阅(只有那个)并且序列化再次起作用。

我无法将[NonSerialized]属性应用于处理程序,因为它不是字段。

有解决这个问题的方法吗?

3 个答案:

答案 0 :(得分:2)

你可以这样做:

[field:NonSerialized]
public event EventHandler MyEvent;

答案 1 :(得分:1)

您可以将事件设为如下字段:

    [NonSerialized]
    private EventHandler _eventHandler;

    public event EventHandler MyEvent
    {
        add { _eventHandler += value; }
        remove { _eventHandler -= value; }
    }

答案 2 :(得分:0)

我不知道这是多么有用,但是 ...

...扩展了Pieter提到的内容,你也可以将mutliple委托处理程序包装到同一个事件中,这样你就可以(理论上)通过这样的方式使你的事件可序列化和不可序列化:< / p>

[NonSerialized]
private EventHandler _nonSerializableeventHandler;
private EventHandler _eventHandler;

public event EventHandler MyEvent
{
    add
    {
        if (value.Method.DeclaringType.IsSerializable)
            _eventHandler += value;
        else
            _nonSerializableeventHandler += value;
    }
    remove
    {
        {
            if (value.Method.DeclaringType.IsSerializable)
                _eventHandler -= value;
            else
                _nonSerializableeventHandler -= value;
        }
    }
}