c# - 序列化对象时如何忽略事件订阅者?

标签 c# .net events serialization binaryformatter

当使用 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/

相关文章:

c# - 如何根据循环自动创建变量?

c# - 处理 WPF 应用程序中多个 View 之间的导航

.net - 从代码后面强制回发?或者从异步回发重新加载 JavaScript?

javascript - 如何仅在有延迟时执行函数?

java - 在Android上获取当前手指位置

c# - 如何使用 Openpop.net 发送邮件?

c# - 使用 ref 而不是返回相同类型的性能成本?

c# - 如何使用 PetaPoco 库从数据库自动创建模型?

.net - SQLCLR 使用错误版本的 .NET Framework

javascript - 将 click 事件绑定(bind)到在嵌套 for 循环中创建的元素