为什么BinaryFormatter尝试序列化Serializable类上的事件?

Rhu*_*arb 11 .net c# serialization binaryformatter

我有一个标记为Serializable的简单类,它碰巧有一个事件.我试图将事件成员标记为NonSerialized,但编译器抱怨.然而,当我去序列化类实例时,BinaryFormatter会抛出一个异常,即事件是不可序列化的.这是否意味着您无法序列化具有事件的类?如果是这样,那么编译器应该事先说出来.

Stream file = File.Open("f", FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();

object obj = null;
try
{
    obj = bf.Deserialize(file);
}
catch (System.Runtime.Serialization.SerializationException e)
{
    MessageBox.Show("De-Serialization failed : {0}", e.Message);
}
file.Close();

System.Collections.ArrayList nodeList = obj as System.Collections.ArrayList;

foreach (TreeNode node in nodeList)
{
    treeView.Nodes.Add(node);
}
Run Code Online (Sandbox Code Playgroud)

无法在以下类上工作:

[Serializable()]
class Simple
{
    private int myInt;
    private string myString;
    public event SomeOtherEventDefinedElsewhere TheEvent;
Run Code Online (Sandbox Code Playgroud)

}

Asa*_*sad 20

"在事件的情况下,还必须在应用NonSerialized属性时添加字段属性限定符,以便将属性应用于基础委托而不是事件本身" 高级序列化 - MSDN


NonSerializedAttributewith字段前加上

[field:NonSerialized]
public event MyEventHandler MyEvent;
Run Code Online (Sandbox Code Playgroud)