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

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

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

Пытаюсь сохранить элементы из ListBox'a в файл.
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" не помечен как сериализуемый."
Я так понял что в ошибке сказано что я пытаюсь сериализовать форму, но причем сдесь моя форма я массив из Entry пытаюсь сериализовать. В чем дело?

Решение задачи: «.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;
        }
 
    }

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


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

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

9   голосов , оценка 3.889 из 5
Похожие ответы