BinaryFormatter拾取事件

时间:2009-10-01 10:37:57

标签: .net events serialization binary

我有一个存储类,它有关于向其添加项目的事件。我的表单类处理事件。当我尝试序列化它时,格式化程序抱怨表单类没有标记为可序列化。当然,我不想序列化它,但是,我不能将事件标记为[NonSerialize],因为它不是字段......

怎么办?

编辑:有条件的信息:

我尝试了两个匿名代码块:

Storage.Instance.AllPartners.OnAdded +=
    new Partners.Added(delegate(Partner p) { 
        viewPartners.RefreshData(); 
    });

事件处理程序作为成员:

Storage.Instance.AllPartners.OnAdded += new Partners.Added(AllPartners_OnAdded);

void AllPartners_OnAdded(Partner partner)
{
    viewPartners.RefreshData();
}

3 个答案:

答案 0 :(得分:1)

也许你可以实现ISerializable接口。

public class MyClass : ISerializable
{
    private int m_shouldBeSerialized;
    private int m_willNotBeSerialized;

    protected MyClass(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("MyValue", m_shouldBeSerialized);
    }

    #region ISerializable Members

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        m_shouldBeSerialized = info.GetInt32("MyValue");
    }

    #endregion
}

答案 1 :(得分:1)

您的存储类通过事件保存对表单的引用,因此格式化程序会尝试序列化表单,因为它是存储类状态的一部分。

尝试在序列化之前取消订阅该表单,然后在序列化之后立即重新订阅。

答案 2 :(得分:1)

使用NonSerializedAttribute制作您的活动。但是要使其工作,您需要告诉编译器将该属性放在支持字段而不是事件本身。

[field:NonSerialized()] 
public event ChangedEventHandler OnAdded;