.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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д