1

我在域模型中有两个对象(都是可序列化的)和一个 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 事件的情况下做到这一点吗?

Ps 对不起我的英语不好。

4

1 回答 1

2

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

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

于 2013-08-28T11:56:29.567 回答