2010-10-20 53 views
0

我并不期望遇到此错误。我想我在其他地方做错了什么。序列化我的班级由于事件处理程序而失败

我有一个MVVM应用程序。

我的模型可以使用BinaryFormatter对自己进行序列化。这工作正常。

今天我在事件处理程序中添加了我的模型,并且包含该模型的视图模型订阅了此事件。

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

我相信这取决于事件的订阅,因为我已经删除了订阅(并且仅限于此)并且序列化再次运行。

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

有没有办法解决这个问题?

+0

有关信息,这只是BinaryFormatter的许多缺陷之一。 IMO不是理想的串行器。我建议你看一下XmlSerializer,DataContractSerializer或者protobuf-net – 2010-10-20 17:27:42

回答

2

,你可以这样做:

[field:NonSerialized] 
public event EventHandler MyEvent; 
1

你可以把这个活动像这样的领域:

[NonSerialized] 
    private EventHandler _eventHandler; 

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

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

...扩展Pieter提到的,你也可以将多个委托处理程序包装到同一个事件中,这样你可以(理论上)让你的事件实际上是串行的可执行和不可序列化,如下所示:

[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; 
     } 
    } 
}