.net XmlSerializer和System.Drawing.Color的最佳解决方案
System.Drawing.Color对象显然无法使用XmlSerializer进行序列化。xml序列化颜色的最佳方法是什么?最简单的方法就是在其核心使用此方法:.net XmlSerializer和System.Drawing.Color的最佳解决方案,.net,xml-serialization,.net,Xml Serialization,System.Drawing.Color对象显然无法使用XmlSerializer进行序列化。xml序列化颜色的最佳方法是什么?最简单的方法就是在其核心使用此方法: String HtmlColor = System.Drawing.ColorTranslator.ToHtml(MyColorInstance); 它只需将任何颜色转换为HTML使用的标准十六进制字符串,该字符串也可以使用以下方法轻松反序列化: Color MyColor = System.Drawing.ColorTransl
String HtmlColor = System.Drawing.ColorTranslator.ToHtml(MyColorInstance);
它只需将任何颜色转换为HTML使用的标准十六进制字符串,该字符串也可以使用以下方法轻松反序列化:
Color MyColor = System.Drawing.ColorTranslator.FromHtml(MyColorString);
这样,您就可以使用bog标准字符串了……您可以为Color编写一个简单的包装类,将ARGB值作为属性公开。您可以使用from/to ARGB转换来转换颜色(请参阅)。比如:
[Serializable]
public class ColorWrapper
{
private Color color;
public ColorWrapper (Color color)
{
this.color = color;
}
public ColorWrapper()
{
// default constructor for serialization
}
public int Argb
{
get
{
return color.ToARGB();
}
set
{
color = Color.FromARGB();
}
}
}
可能还需要颜色的访问器
这样做的好处是,该类可以在所有需要序列化颜色的地方使用。如果要使XML可读(而不是任意的ARGB整数),可以使用balabaster描述的to/from HTML方法。最终工作版本:
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);
}
}
有更好的解决办法吗?这是一种suxx,因为对于每种颜色,您都必须编写大量的内容才能将其发送到xml。我正在尝试使用XML来配置我的漂亮软件:)在同一主题中,还有一个问题称此解决方案为字段代理。那么,您将丢失alpha值。