System.Drawing.Color对象显然不会使用XmlSerializer进行序列化.xml序列化颜色的最佳方法是什么?
最简单的方法是使用它的核心:
String HtmlColor = System.Drawing.ColorTranslator.ToHtml(MyColorInstance);
它只会将颜色转换为HTML使用的标准十六进制字符串,这很容易反序列化:
Color MyColor = System.Drawing.ColorTranslator.FromHtml(MyColorString);
这样你只需要使用沼泽标准字符串......
最终工作版本:
Color clrGrid = Color.FromArgb(0, 0, 0); [XmlIgnore] public Color ClrGrid { get { return clrGrid; } set { clrGrid = value; } } [XmlElement("ClrGrid")] public string ClrGridHtml { get { return ColorTranslator.ToHtml(clrGrid); } set { ClrGrid = ColorTranslator.FromHtml(value); } }
我们用这个:
[Serializable] public struct ColorEx { private Color m_color; public ColorEx(Color color) { m_color = color; } [XmlIgnore] public Color Color { get { return m_color; } set { m_color = value; } } [XmlAttribute] public string ColorHtml { get { return ColorTranslator.ToHtml(this.Color); } set { this.Color = ColorTranslator.FromHtml(value); } } public static implicit operator Color(ColorEx colorEx) { return colorEx.Color; } public static implicit operator ColorEx(Color color) { return new ColorEx(color); } }