Warum ist BinaryFormatter versucht zu serialisieren, die ein Ereignis auf eine Serialisierbare Klasse?

Ich habe eine einfache Klasse wird als Serialisierbar markiert, und es passiert ein Ereignis. Ich habe versucht, zu diesem Anlass Mitglied als NonSerialized, aber der compiler meckert. Doch wenn ich zum serialisieren der Klasse-Instanz der BinaryFormatter wirft eine Ausnahme, die Veranstaltung ist nicht serialisierbar. Bedeutet das, dass Sie nicht serialisieren von Klassen, die Ereignisse? Wenn dem so ist, dann sollte der compiler so zu sagen nach vorne.

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);
}

Nicht funktioniert auf die folgende Klasse:

[Serializable()]
class Simple
{
    private int myInt;
    private string myString;
    public event SomeOtherEventDefinedElsewhere TheEvent;

}

  • Können Sie erklären, ein wenig mehr über das, was Sie zu tun versuchen, und vielleicht geben uns einen kleinen code-snippet?
  • Sicher. Ich habe nur diese Klasse, hat sich vor allem string-und int-Eigenschaften. Aber es hat ein paar Ereignisse zu informieren, die Verbraucher, wenn die Instanzen ändern. Ich bin die Speicherung von Instanzen dieser Klasse in der Eigenschaft " Tag " ein .NET TreeView-Klasse, oder genauer gesagt, in jedem Tag-Eigenschaft jedes TreeNode-Objekt entspricht, das Objekt. Wenn ich versuche zu serialisieren, die das TreeView-auf Festplatte (Speicherung jeder Knoten in einer ArrayList und dann schriftlich aus der Liste), bekomme ich eine exception: "der Typ 'MyEventSubscriber' in Assembly MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null " ist nicht als serialisierbar markiert."
  • cont... MyEventSubscriber passiert, werden die class-Instanz des Abonnenten für das event auf der Klasse, die ich bin versucht zu serialisieren (die, die in der Tag-Eigenschaft des TreeNode -).
  • Bitte Bearbeiten Sie die ursprüngliche Frage (die Sie dann verwenden können, formatieren) auch, wir wirklich brauchen, um sehen, einige der code, bitte machen Sie einen einfachen Fall, der zeigt das problem.
  • "Ich habe versucht, markieren Sie den Ereignis-Mitglied als NonSerialized, aber der compiler meckert". Welche Fehler haben Sie?
InformationsquelleAutor Rhubarb | 2010-02-22
Schreibe einen Kommentar