如何序列化一个侦听器而不序列化同一事件的其他侦听器

时间:2013-08-28 11:29:29

标签: c# serialization

我在域模型中有两个对象(都是可序列化的)和一个winform控件。第一个对象和winform控件是第二个对象的同一事件的侦听器。我想序列化第二个对象,第一个对象作为监听器,没有winform控件监听器。

class SecondObject
{ 
    public event EventHandler SomeEvent; 
}

class FirstObject
{
    SecondObject object;
    object.SomeEvent += secondObject_SomeEvent();
}

class WinFormControl
{
    SecondObject object;
    object.SomeEvent += secondObject_SomeEvent(); 
}

现在,我这样做:

class SecondObject
{ 
    [field: NonSerialized]
    public event EventHandler SomeEvent; 
}

class FirstObject
{
    SecondObject object;

    [OnDeserialized()]
    internal void SubscribeToEventsOnDeserialized(StreamingContext context)
    {
         object.SomeEvent += secondObject_SomeEvent();
    }       
}

但是我可以在没有NonSerialized事件的情况下这样做吗?

P.S。抱歉我的英语不好。

1 个答案:

答案 0 :(得分:2)

坦率地说,我强烈建议:不要序列化事件......永远。这是纯粹的实现,因为序列化应该是在谈论数据

使用BinaryFormatter(我认为,你正在使用的是),选择性地序列化这个的唯一方法是实现ISerializable并自己完成所有工作,但坦率地说我强烈建议不要它 - 就像我建议首先反对序列化事件一样强烈(当然,我也经常提醒人们首先使用BinaryFormatter,特别是如果意图将数据存储在某个地方 - 太多恐怖故事...)