Tengo una clase simple que está marcada como Serializable, y sucede que tiene un evento. Traté de marcar el miembro del evento como NonSerialized, sin embargo el compilador se queja. Sin embargo, cuando voy a serializar la instancia de clase, BinaryFormatter arroja una excepción que indica que el evento no es serializable. ¿Eso significa que no puedes serializar las clases que tienen eventos? Si es así, entonces el compilador debería decirlo así por adelantado.¿Por qué BinaryFormatter intenta serializar un evento en una clase serializable?
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);
}
no funciona con la clase siguiente:
[Serializable()]
class Simple
{
private int myInt;
private string myString;
public event SomeOtherEventDefinedElsewhere TheEvent;
}
¿Puedes explicarnos un poco más sobre lo que intentas hacer y posiblemente darnos un pequeño fragmento de código? – IAbstract
Claro. Acabo de tener esta clase que tiene principalmente propiedades string e int. Pero tiene algunos eventos para notificar a los consumidores cuando las instancias cambian. Estoy almacenando instancias de esta clase en la propiedad Tag de una clase .NET TreeView, o más específicamente, en cada propiedad Tag de cada TreeNode que corresponde al objeto.Cuando trato de serializar TreeView en el disco (almacenando cada nodo en una ArrayList y luego escribiendo la lista), obtengo una excepción: "Escriba 'MyEventSubscriber' en el ensamblado 'MyAssembly, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null 'no está marcado como serializable. " – Rhubarb
cont ... MyEventSubscriber es la instancia de clase del suscriptor del evento en la clase que intento serializar (la que está en la propiedad Tag del TreeNode). – Rhubarb