Reference to the Main Form whilst trying to Serialize objects in C#
- by Paul Matthews
I have a button on my main form which calls a method to serialize some objects to disk. I am trying to add these objects to an ArrayList and then serialize them using a BinaryFormatter and a FileStream.
public void SerializeGAToDisk(string GenAlgName)
{
// Let's make a list that includes all the objects we
// need to store a GA instance
ArrayList GAContents = new ArrayList();
GAContents.Add(GenAlgInstances[GenAlgName]); // Structure and info for a GA
GAContents.Add(RunningGAs[GenAlgName]); // There may be several running GA's
using (FileStream fStream = new FileStream(GenAlgName + ".ga",
FileMode.Create, FileAccess.Write, FileShare.None))
{
BinaryFormatter binFormat = new BinaryFormatter();
binFormat.Serialize(fStream, GAContents);
}
}
When running the above code I get the following exception:
System.Runtime.Serialization.SerializationException was unhandled
Message=Type 'WindowsFormsApplication1.Form1' in Assembly 'GeneticAlgApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
So that means that somewhere in the objects I'm trying to save there must be a reference to the main form. The only possible references I can see are 3 delegates which all point to methods in the main form code. Do delegates get serialized as well? I can't seem to apply the [NonSerialized] attribute to them.
Is there anything else I might be missing? Even better, is there a quick method to find the reference(s) that are causing the problem?