我在域模型中有两个对象(都是可序列化的)和一个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。抱歉我的英语不好。
答案 0 :(得分:2)
坦率地说,我强烈建议:不要序列化事件......永远。这是纯粹的实现,因为序列化应该是在谈论数据。
使用BinaryFormatter
(我认为,你正在使用的是),选择性地序列化这个的唯一方法是实现ISerializable
并自己完成所有工作,但坦率地说我强烈建议不要它 - 就像我建议首先反对序列化事件一样强烈(当然,我也经常提醒人们首先使用BinaryFormatter
,特别是如果意图将数据存储在某个地方 - 太多恐怖故事...)