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

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

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

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

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

textual
Листинг программы
[Serializable]
    public class Job : IScheduledJob
    {
        public IPlanned getTask { get; set; }
        [NonSerialized]
        private Timer Timer = null;
        public bool Running { get; set; }
        public IPlanned ParentTask { get; set; }
        public string ExMessage { get; set; }
        public bool Suspended { get; set;}
        public DateTime StartWaitingTime { get; set; }
        public DateTime FinishWaitingTime { get; set; }
        public DateTime NextLaunchTime { get; set; }
        public bool Complited { get; set; }
 
        public Job(IPlanned task, Timer timer)
        {
            this.getTask = task;
            this.getTimer = timer;
            this.Running = false;
            Suspended = false;
            StartWaitingTime = default(DateTime);
            FinishWaitingTime = default(DateTime);
            Complited = false;
        }
 
        public JobStatusInfo GetJobStatusInfo()
        {
            return new JobStatusInfo(getTask.Guid, Running, getTask.RunTime, getTask.StopTime, getTask.RepeatInterval, getTask.TaskType, getTask.Report, ExMessage, Suspended, StartWaitingTime, FinishWaitingTime, Complited);
        }
 
        [OnSerializing]
        private void OnSerializing(StreamingContext context)
        {
            getTask = getTask;
        }
 
        #region Properties
 
        public Timer getTimer
        {
            get
            {
                return Timer;
            }
            set
            {
                Timer = value;
            }
        }
 
        #endregion
    }

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


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

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

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