Is there an OnDeserialized event or similar so I can determine that a class has been deserialized?
I've got a base class for all my custom entity collections, a simple version of it is this:

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

The collections sit within a serialized class that sits in `Session` (i.e. Customer class in session has a collection of Order entities). The problem is that my entity base class's MadeDirty event is as follows:

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

Unfortunately, I cannot just remove the NonSerialized attribute on the event, because this causes issues in the session state server when deployed to my application server.

Is there any way that I can capture a deserialized completion event on the CollectionBase so I can iterate through all the items and re-assign the `MadeDirty` event on each deserialization from the Session? I.e.

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

But, I can't imagine this is the first time anyone's come across this issue, so is there a better alternative?
Is there an OnDeserialized event or similar so I can determine that a class has been deserialized?
===

I've got a base class for all my custom entity collections, a simple version of it is this:

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

The collections sit within a serialized class that sits in `Session` (i.e. Customer class in session has a collection of Order entities). The problem is that my entity base class's MadeDirty event is as follows:

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

Unfortunately, I cannot just remove the NonSerialized attribute on the event, because this causes issues in the session state server when deployed to my application server.

Is there any way that I can capture a deserialized completion event on the CollectionBase so I can iterate through all the items and re-assign the `MadeDirty` event on each deserialization from the Session? I.e.

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

But, I can't imagine this is the first time anyone's come across this issue, so is there a better alternative?