2010-06-08 39 views
4

我已經得到了我所有的自定義實體的集合基類,它的一個簡單的版本是這樣的:有沒有OnDeserialized事件或類似的,所以我可以確定一個類已被反序列化?

[Serializable] 
public class CollectionBase<T> : List<T> where T : IEntity 
{ 

    public bool IsDirty {get;} 

    public new void Add(T item) 
    { 
     this.SetDirty(); 
     base.Add(item); 
     item.MadeDirty += new EventHandler(item_MadeDirty); 
    } 

    // Other standard list methods overridden here 
    ... 

    public void SetDirty() { } // Mark the collection as dirty 

    private void item_MadeDirty(object sender, EventArgs e) 
    { 
     this.SetDirty(); 
    } 

} 

藏品坐的是坐落在Session(即客戶類會話序列化類中有一個訂單實體的集合)。問題是,我的實體基類的MadeDirty事件如下:

[field: NonSerialized()] 
public event EventHandler MadeDirty; 

不幸的是,我不能只是刪除對事件NonSerialized屬性,因爲在部署到我的應用程序服務器這會導致會話狀態服務器的問題。

是否有任何方法可以捕獲CollectionBase上的反序列化完成事件,以便我可以遍歷所有項目並重新分配來自Session的每個反序列化的MadeDirty事件?即

private void OnDeserialized(object sender, EventArgs e) 
{ 
    foreach (T item in this) 
    { 
     item.MadeDirty+= new EventHandler(item_MadeDirty); 
    } 
} 

但是,我無法想象這是第一次有人遇到這個問題,那麼有沒有更好的選擇?

回答

4

是的,你可以用special attribute的方法和正確的簽名添加到您的類:

[OnDeserializedAttribute()] 
private void RunThisMethod(StreamingContext context) 
{ 
    // post-serialize your class 
} 
+0

非常感謝亨克。發現! – GenericTypeTea 2010-06-08 16:39:17

相關問題