System.Drawing.Color 对象显然不会使用 XmlSerializer 进行序列化。xml序列化颜色的最佳方法是什么?
P a u l
问问题
13191 次
4 回答
33
最简单的方法使用它的核心:
String HtmlColor = System.Drawing.ColorTranslator.ToHtml(MyColorInstance);
它只会将任何颜色转换为 HTML 使用的标准十六进制字符串,使用以下命令可以轻松反序列化:
Color MyColor = System.Drawing.ColorTranslator.FromHtml(MyColorString);
这样你就可以使用沼泽标准字符串......
于 2008-12-17T22:21:50.447 回答
18
最终工作版本:
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); }
}
于 2008-12-18T00:32:14.303 回答
14
我们使用这个:
[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);
}
}
于 2010-07-08T15:05:23.727 回答
1
您可以为 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 方法。
于 2008-12-17T22:26:07.270 回答