如何在序列化对象时忽略事件订阅者?
问题描述:
当以下类与BinaryFormatter
序列化时,订阅Roar
事件的任何对象也将被序列化,因为对这些对象的引用由EventHandler委托保存。如何在序列化对象时忽略事件订阅者?
[Serializable]
public class Lion
{
public event EventHandler Roar;
public string Name { get; set; }
public float Fluffiness { get; set; }
public Lion(string name, float fluffiness)
{
Name = name;
Fluffiness = fluffiness;
}
public void Poke()
{
Roar(); // Could be null, etc..
}
}
你将如何阻止事件的用户正在连载的开始与狮子对象图的一部分?
将[NonSerializable]
属性放在event
上将不会编译。
注:我回答我自己的问题,因为我认为它可能是有用的网站上的信息!
常问问题:询问并回答自己的问题也是完全正确的,但假装你在危险之中:以问题的形式表述它。
答
你必须包括“field:
”作为对event
的[NonSerialized]
属性的一部分。
即:
[field: NonSerialized]
public event EventHandler Roar;
感谢。但为什么呢? – 2014-02-17 14:26:24