protected override void deserialize(BaseItem item, List <PropertyNames> changedProperties)
        {
            Class c     = item as Class;
            Color color = ColorTranslator.FromHtml(c.Color);

            byte[] rawColor = new byte[]
            {
                color.R, color.G, color.B
            };

            if (changedProperties != null)
            {
                if (CourseNumber != c.CourseNumber)
                {
                    changedProperties.Add(PropertyNames.CourseNumber);
                }

                if ((GradeScales == null && c.GradeScales != null) ||
                    (GradeScales != null && c.GradeScales == null) ||
                    (GradeScales != null && c.GradeScales != null && !GradeScales.SequenceEqual(c.GradeScales)))
                {
                    changedProperties.Add(PropertyNames.GradeScales);
                }

                if (ShouldAverageGradeTotals != c.ShouldAverageGradeTotals)
                {
                    changedProperties.Add(PropertyNames.ShouldAverageGradeTotals);
                }

                if (Credits != c.Credits)
                {
                    changedProperties.Add(PropertyNames.Credits);
                }

                if (Position != c.Position)
                {
                    changedProperties.Add(PropertyNames.Position);
                }

                if (!RawColor.SequenceEqual(rawColor))
                {
                    changedProperties.Add(PropertyNames.Color);
                }

                if (DoesRoundGradesUp != c.DoesRoundGradesUp)
                {
                    changedProperties.Add(PropertyNames.DoesRoundGradesUp);
                }
            }

            CourseNumber             = c.CourseNumber;
            GradeScales              = c.GradeScales;
            ShouldAverageGradeTotals = c.ShouldAverageGradeTotals;
            Credits  = c.Credits;
            Position = c.Position;

            RawColor = rawColor;

            DoesRoundGradesUp = c.DoesRoundGradesUp;

            base.deserialize(c, changedProperties);
        }
        protected override void deserialize(BaseItem item, List <SyncPropertyNames> changedProperties)
        {
            Class c = item as Class;

            byte[] rawColor = ColorHelper.ToBytes(c.Color);

            if (changedProperties != null)
            {
                if (CourseNumber != c.CourseNumber)
                {
                    changedProperties.Add(SyncPropertyNames.CourseNumber);
                }

                var gradeScales = GetGradeScales();
                if ((gradeScales == null && c.GradeScales != null) ||
                    (gradeScales != null && c.GradeScales == null) ||
                    (gradeScales != null && c.GradeScales != null && !gradeScales.SequenceEqual(c.GradeScales)))
                {
                    changedProperties.Add(SyncPropertyNames.GradeScales);
                }

                if (ShouldAverageGradeTotals != c.ShouldAverageGradeTotals)
                {
                    changedProperties.Add(SyncPropertyNames.ShouldAverageGradeTotals);
                }

                if (Credits != c.Credits)
                {
                    changedProperties.Add(SyncPropertyNames.Credits);
                }

                if (Position != c.Position)
                {
                    changedProperties.Add(SyncPropertyNames.Position);
                }

                if (!RawColor.SequenceEqual(rawColor))
                {
                    changedProperties.Add(SyncPropertyNames.Color);
                }

                if (DoesRoundGradesUp != c.DoesRoundGradesUp)
                {
                    changedProperties.Add(SyncPropertyNames.DoesRoundGradesUp);
                }

                if (GpaType != c.GpaType)
                {
                    changedProperties.Add(SyncPropertyNames.GpaType);
                }

                if (PassingGrade != c.PassingGrade)
                {
                    changedProperties.Add(SyncPropertyNames.PassingGrade);
                }

                if (OverriddenGrade != c.OverriddenGrade)
                {
                    changedProperties.Add(SyncPropertyNames.OverriddenGrade);
                }

                if (OverriddenGPA != c.OverriddenGPA)
                {
                    changedProperties.Add(SyncPropertyNames.OverriddenGPA);
                }

                if (StartDate != c.StartDate.ToUniversalTime())
                {
                    changedProperties.Add(SyncPropertyNames.StartDate);
                }

                if (EndDate != c.EndDate.ToUniversalTime())
                {
                    changedProperties.Add(SyncPropertyNames.EndDate);
                }
            }

            CourseNumber = c.CourseNumber;
            SetGradeScales(c.GradeScales);
            ShouldAverageGradeTotals = c.ShouldAverageGradeTotals;
            Credits  = c.Credits;
            Position = c.Position;

            RawColor = rawColor;

            DoesRoundGradesUp = c.DoesRoundGradesUp;
            GpaType           = c.GpaType;
            PassingGrade      = c.PassingGrade;

            OverriddenGPA   = c.OverriddenGPA;
            OverriddenGrade = c.OverriddenGrade;

            StartDate = c.StartDate.ToUniversalTime();
            EndDate   = c.EndDate.ToUniversalTime();

            base.deserialize(c, changedProperties);
        }