代码之家  ›  专栏  ›  技术社区  ›  Matt Ellen Bipin Vayalu

由于eventhandler,序列化我的类失败

  •  0
  • Matt Ellen Bipin Vayalu  · 技术社区  · 15 年前

    我有一个MVVM应用程序。

    我的模型可以使用 BinaryFormatter . 一切都很顺利。

    现在,当我尝试序列化模型时,我得到一个错误,因为我的viewmodel不是可序列化的(按设计)。

    我确信这是由于对事件的订阅,因为我已经删除了订阅(仅此而已),序列化再次工作。

    [NonSerialized] 属性,因为它不是字段。

    有办法解决这个问题吗?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Steve Ellinger    15 年前

    你可以这样做:

    [field:NonSerialized]
    public event EventHandler MyEvent;
    
        2
  •  1
  •   Pieter van Ginkel    15 年前

    您可以将事件设置为如下字段:

        [NonSerialized]
        private EventHandler _eventHandler;
    
        public event EventHandler MyEvent
        {
            add { _eventHandler += value; }
            remove { _eventHandler -= value; }
        }
    
        3
  •  0
  •   Steven    15 年前

    我不知道这有多有用,但是 ...

    …扩展Pieter提到的内容,您还可以将多个委托处理程序包装到同一事件中,这样您就可以(理论上)通过执行以下操作使您的事件既可序列化又不可序列化:

    [NonSerialized]
    private EventHandler _nonSerializableeventHandler;
    private EventHandler _eventHandler;
    
    public event EventHandler MyEvent
    {
        add
        {
            if (value.Method.DeclaringType.IsSerializable)
                _eventHandler += value;
            else
                _nonSerializableeventHandler += value;
        }
        remove
        {
            {
                if (value.Method.DeclaringType.IsSerializable)
                    _eventHandler -= value;
                else
                    _nonSerializableeventHandler -= value;
            }
        }
    } 
    
    推荐文章