我没想到会遇到这个错误。我想我在其他地方做错了。
我有一个MVVM应用程序。
我的模型可以使用BinaryFormatter
序列化自己。这很好。
今天我在一个事件处理程序中添加了我的模型,包含模型的viewmodel订阅了这个事件。
现在,当我尝试序列化模型时,我收到错误,因为我的viewmodel不可序列化(按设计)。
我确信这取决于对该事件的订阅,因为我已经删除了订阅(只有那个)并且序列化再次起作用。
我无法将[NonSerialized]
属性应用于处理程序,因为它不是字段。
有解决这个问题的方法吗?
答案 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;
}
}
}