Проблемы с сериализацией (BinaryFormatter) - C#

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

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

Доброго всем времени суток. Есть проблема с использованием BinaryFormatter. Ниже представлен мой код :
Листинг программы
  1. internal void BackUpJobs()
  2. {
  3. lock (JobList)
  4. {
  5. BinaryFormatter formatter = new BinaryFormatter();
  6. try
  7. {
  8. using (FileStream file = new FileStream("D:\\JobsArchive.dat", FileMode.Create))
  9. {
  10. ObservableCollection<Job> t = new ObservableCollection<Job>();
  11. t.Add(new Job(new TestTask(), null));
  12. formatter.Serialize(file, JobList);
  13. }
  14. }
  15. catch (Exception ex)
  16. {
  17. }
  18. }
  19. }
При вызове этого метода возникает исключение, которое перехватывается (В кратце ex.message говорит что класс, членом которого является JobList не помечен атрибутом serializable). Почему же так происходит если на msdn написано что аргумент метода Serialize - это объект в корне сериализуемого графа? Создаваемая в теле метода коллекция ObservableCollection<Job> t аналогична по типу JobList, отличаются они лишь тем что JobList - это глобальная переменная. ObservableCollection<Job> t сериализируется без проблем.

Решение задачи: «Проблемы с сериализацией (BinaryFormatter)»

textual
Листинг программы
  1. [Serializable]
  2.     public class Job : IScheduledJob
  3.     {
  4.         public IPlanned getTask { get; set; }
  5.         [NonSerialized]
  6.         private Timer Timer = null;
  7.         public bool Running { get; set; }
  8.         public IPlanned ParentTask { get; set; }
  9.         public string ExMessage { get; set; }
  10.         public bool Suspended { get; set;}
  11.         public DateTime StartWaitingTime { get; set; }
  12.         public DateTime FinishWaitingTime { get; set; }
  13.         public DateTime NextLaunchTime { get; set; }
  14.         public bool Complited { get; set; }
  15.  
  16.         public Job(IPlanned task, Timer timer)
  17.         {
  18.             this.getTask = task;
  19.             this.getTimer = timer;
  20.             this.Running = false;
  21.             Suspended = false;
  22.             StartWaitingTime = default(DateTime);
  23.             FinishWaitingTime = default(DateTime);
  24.             Complited = false;
  25.         }
  26.  
  27.         public JobStatusInfo GetJobStatusInfo()
  28.         {
  29.             return new JobStatusInfo(getTask.Guid, Running, getTask.RunTime, getTask.StopTime, getTask.RepeatInterval, getTask.TaskType, getTask.Report, ExMessage, Suspended, StartWaitingTime, FinishWaitingTime, Complited);
  30.         }
  31.  
  32.         [OnSerializing]
  33.         private void OnSerializing(StreamingContext context)
  34.         {
  35.             getTask = getTask;
  36.         }
  37.  
  38.         #region Properties
  39.  
  40.         public Timer getTimer
  41.         {
  42.             get
  43.             {
  44.                 return Timer;
  45.             }
  46.             set
  47.             {
  48.                 Timer = value;
  49.             }
  50.         }
  51.  
  52.         #endregion
  53.     }

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


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

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

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

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

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

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