代码之家  ›  专栏  ›  技术社区  ›  djdd87

是否存在OnDeserialized事件或类似事件,以便确定类已反序列化?

  •  5
  • djdd87  · 技术社区  · 14 年前

    我的所有自定义实体集合都有一个基类,它的一个简单版本是:

    [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 (即会话中的Customer类具有订单实体的集合)。问题是我的实体基类的MadeDirty事件如下所示:

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

    不幸的是,我不能只是删除 NonSerialized

    是否有任何方法可以捕获CollectionBase上的反序列化完成事件,以便遍历所有项并重新分配 MadeDirty

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

    但是,我无法想象这是第一次有人遇到这个问题,所以有更好的选择吗?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Henk Holterman    14 年前

    是的,您可以使用 special attribute 以及你们班的正确签名:

    [OnDeserializedAttribute()]
    private void RunThisMethod(StreamingContext context)
    { 
        // post-serialize your class
    }
    
        2
  •  1
  •   moribvndvs    14 年前