我有一个存储类,它有关于向其添加项目的事件。我的表单类处理事件。当我尝试序列化它时,格式化程序抱怨表单类没有标记为可序列化。当然,我不想序列化它,但是,我不能将事件标记为[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();
}
答案 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;