当使用 BinaryFormatter
序列化以下类时,订阅 Roar
事件的任何对象也将被序列化,因为对这些对象的引用由 EventHandler 委托(delegate)持有.
[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..
}
}
如何阻止事件订阅者被序列化为以 Lion 开头的对象图的一部分?
将 [NonSerializable]
属性放在 event
上将不会编译。
注意:我正在回答我自己的问题,因为我认为网站上的信息可能会有用!
FAQ: It's also perfectly fine to ask and answer your own question, but pretend you're on Jeopardy: phrase it in the form of a question.
最佳答案
您必须将“field:
”作为 [NonSerialized]
属性的一部分包含在 event
中。
即:
[field: NonSerialized]
public event EventHandler Roar;
关于c# - 序列化对象时如何忽略事件订阅者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1173667/