public override void Deserialize(XElement element) { if (element.Element("transitions") != null) { XElement[] elements = element.Element("transitions").Descendants("transition") .OrderBy(x => (int) x.Attribute("threshold")) .ToArray(); for (int i = 0; i < elements.Length; i++) { float val = 100f; bool parsed = false; //We support threshold values in the 0 - 1 range, or the 0 - 100% range. //We'll assume anything <= 1.0 is the former. //If it's the 0 - 100% range then convert the number! if (elements[i].Attribute("threshold") != null) { parsed = float.TryParse(elements[i].Attribute("threshold").Value, NumberStyles.Float, CultureInfo.InvariantCulture, out val); if (parsed && val > 1.0f) val /= 100; else if (!parsed) val = 1.0f; } Color color = new Color(); if (elements[i].Element("color") != null) color = color.ConvertColorFromString(elements[i].Element("color").Value); else color = Color.HotPink; transitionThresholds.Add(val); colors.Add(color); } } base.Deserialize(element); }