.NET 4.x Неожиданная ошибка при сераилизации: Тип MainForm не помечен как сериализуемый - C#

Узнай цену своей работы

Формулировка задачи:

Пытаюсь сохранить элементы из ListBox'a в файл.
Листинг программы
  1. private void Btn_Save_Click(object sender, EventArgs e)
  2. {
  3. BinaryFormatter formatter = new BinaryFormatter();
  4. using (FileStream file = new FileStream("Entries.dat", FileMode.OpenOrCreate)) {
  5. formatter.Serialize(file, listBoxEntries.Items.Cast<Entry>().ToArray()); // <- Бросает исключение!!!
  6. }
  7. }
Исключение:
System.Runtime.Serialization.SerializationException: "Тип "MyWindowsFormsApplication.MainForm" в сборке "MyWindowsFormsApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" не помечен как сериализуемый."
Я так понял что в ошибке сказано что я пытаюсь сериализовать форму, но причем сдесь моя форма я массив из Entry пытаюсь сериализовать. В чем дело?

Решение задачи: «.NET 4.x Неожиданная ошибка при сераилизации: Тип MainForm не помечен как сериализуемый»

textual
Листинг программы
  1.     [Serializable]
  2.     public abstract class Entry : IDisposable
  3.     {
  4.         public double IntervalInMins
  5.         {
  6.             get { return timer.Interval / 60000; }
  7.             set { timer.Interval = value * 60000; }
  8.         }
  9.         public int CountOfAds { get; set; }
  10.        
  11.         public string Name { get; set; }
  12.         public string URL { get; set; }
  13.        
  14.         [NonSerialized]
  15.         private Timer timer = new Timer();
  16.  
  17.         public event EventHandler<NewAdsEventArgs> NewAdsDetected;
  18.  
  19.         public Entry()
  20.         {
  21.             timer.Elapsed += Timer_Elapsed;
  22.         }
  23.  
  24.         public Entry(string name, string url, int intervalInMins) : this()
  25.         {
  26.             Name = name;
  27.             URL = url;
  28.             IntervalInMins = intervalInMins;
  29.            
  30.             Start();
  31.  
  32.             // first check
  33.             Check();
  34.         }
  35.         ~Entry()
  36.         {
  37.             this.Dispose(false);
  38.         }
  39.  
  40.         public void Start()
  41.         {
  42.             timer.Start();
  43.         }
  44.         public void Stop()
  45.         {
  46.             timer.Stop();
  47.         }
  48.  
  49.         protected void OnNewAdsDetected(int count)
  50.         {
  51.             NewAdsDetected?.Invoke(this, new NewAdsEventArgs(count));
  52.         }
  53.  
  54.         protected abstract void Check();
  55.  
  56.         private void Timer_Elapsed(object sender, ElapsedEventArgs e)
  57.         {
  58.             Check();
  59.         }
  60.        
  61.        
  62.         #region IDisposable Support
  63.         private bool disposedValue = false;
  64.  
  65.         protected virtual void Dispose(bool disposing)
  66.         {
  67.             if (!disposedValue)
  68.             {
  69.                 if (disposing)
  70.                 {
  71.                     // TODO: освободить управляемое состояние (управляемые объекты).
  72.                 }
  73.                 timer.Dispose();
  74.  
  75.                 disposedValue = true;
  76.             }
  77.         }
  78.         public void Dispose()
  79.         {
  80.             Dispose(true);
  81.             GC.SuppressFinalize(this);
  82.         }
  83.         #endregion
  84.  
  85.         public override string ToString() {
  86.             return Name;
  87.         }
  88.  
  89.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы