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