.NET 4.x Неожиданная ошибка при сераилизации: Тип MainForm не помечен как сериализуемый - C#
Формулировка задачи:
Пытаюсь сохранить элементы из ListBox'a в файл.
Исключение:
Я так понял что в ошибке сказано что я пытаюсь сериализовать форму, но причем сдесь моя форма я массив из Entry пытаюсь сериализовать. В чем дело?
private void Btn_Save_Click(object sender, EventArgs e)
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream file = new FileStream("Entries.dat", FileMode.OpenOrCreate)) {
formatter.Serialize(file, listBoxEntries.Items.Cast<Entry>().ToArray()); // <- Бросает исключение!!!
}
}
System.Runtime.Serialization.SerializationException: "Тип "MyWindowsFormsApplication.MainForm" в сборке "MyWindowsFormsApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" не помечен как сериализуемый."
Решение задачи: «.NET 4.x Неожиданная ошибка при сераилизации: Тип MainForm не помечен как сериализуемый»
textual
Листинг программы
[Serializable]
public abstract class Entry : IDisposable
{
public double IntervalInMins
{
get { return timer.Interval / 60000; }
set { timer.Interval = value * 60000; }
}
public int CountOfAds { get; set; }
public string Name { get; set; }
public string URL { get; set; }
[NonSerialized]
private Timer timer = new Timer();
public event EventHandler<NewAdsEventArgs> NewAdsDetected;
public Entry()
{
timer.Elapsed += Timer_Elapsed;
}
public Entry(string name, string url, int intervalInMins) : this()
{
Name = name;
URL = url;
IntervalInMins = intervalInMins;
Start();
// first check
Check();
}
~Entry()
{
this.Dispose(false);
}
public void Start()
{
timer.Start();
}
public void Stop()
{
timer.Stop();
}
protected void OnNewAdsDetected(int count)
{
NewAdsDetected?.Invoke(this, new NewAdsEventArgs(count));
}
protected abstract void Check();
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
Check();
}
#region IDisposable Support
private bool disposedValue = false;
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
// TODO: освободить управляемое состояние (управляемые объекты).
}
timer.Dispose();
disposedValue = true;
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
#endregion
public override string ToString() {
return Name;
}
}