2010-10-20 43 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; 
     } 
    } 
} 
相關問題