Search code examples
c#binaryformatter

Deserialize some classes


I created a serializable class and after serialization some class instances when I deserialize this file, I get an one class, but I need to get all classes.

I serializing classes using BinaryFormatter. I coding on C# using .NET Framework.

My deserialization now:

using (var fs = new FileStream("doing.dat", FileMode.OpenOrCreate))
{
    ActionsClass = formatter.Deserialize(fs) as Doing;
    items.Add(ActionsClass.action);
}

Class Doing:

[Serializable]
public class Doing : ActionsForm
{
    public Doing(DateTime leadtime, string act)
    {
        if (leadtime < DateTime.Now) throw new ArgumentException("Some error text", nameof(leadtime));
        if (act == "") throw new ArgumentException("Some error text", nameof(act));
        PostTime = DateTime.Now;
        TimeLead = leadtime;
        action = act;
    }
}

And class ActionsForm:

[Serializable]
public abstract class ActionsForm
{
    public DateTime PostTime { get; protected set; }
    public DateTime TimeLead { get; protected set; }
    public string action { get; protected set; }
}

Solution

  • You have to deserialize the times you serialized your object.

    BinaryFormatter formatter = new BinaryFormatter();
    
    DerivedClass object1 = new DerivedClass() { _baseField = "Object 1" };
    DerivedClass object2 = new DerivedClass() { _baseField = "Object 2" };
    
    using (FileStream writestream = new FileStream(@"data.bin", FileMode.Create, FileAccess.Write))
    {
        formatter.Serialize(writestream, object1);
        formatter.Serialize(writestream, object2);
    }
    
    FileStream readstream = new FileStream(@"data.bin", FileMode.Open, FileAccess.Read);
    
    DerivedClass deserializedobject1 = (DerivedClass)formatter.Deserialize(readstream);
    DerivedClass deserializedobject2 = (DerivedClass)formatter.Deserialize(readstream);
    
    readstream.Dispose();