public override object Deserialize(XElement elem, XNamespace overridingNamespace) { var elemR = elem.Element(this.GetXName("R", overridingNamespace)); if (elemR == null) { var colorName = elem.Value; var colorByName = ReflectionUtils.InvokeStaticMethod(Type, "FromName", colorName); return(colorByName); } int a = 255, r, g = 0, b = 0; var elemA = elem.Element(this.GetXName("A", overridingNamespace)); if (elemA != null && !int.TryParse(elemA.Value, out a)) { a = 0; } if (!int.TryParse(elemR.Value, out r)) { r = 0; } var elemG = elem.Element(this.GetXName("G", overridingNamespace)); if (elemG != null && !int.TryParse(elemG.Value, out g)) { g = 0; } var elemB = elem.Element(this.GetXName("B", overridingNamespace)); if (elemB != null && !int.TryParse(elemB.Value, out b)) { b = 0; } var result = ReflectionUtils.InvokeStaticMethod(Type, "FromArgb", a, r, g, b); return(result); }