Десериализовать некоторые классы - PullRequest
0 голосов
/ 18 мая 2019

Я создал сериализуемый класс, и после сериализации некоторых экземпляров классов, когда я десериализую этот файл, я получаю один класс, но мне нужно получить все классы.

Я сериализовал классы, используя BinaryFormatter. Я кодирую на C #, используя .NET Framework.

Моя десериализация сейчас:

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

Класс занятий:

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

И класс ActionsForm:

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

1 Ответ

0 голосов
/ 18 мая 2019

Вы должны десериализовать время, когда вы сериализовали свой объект.

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();
...