这是我用于序列化
ColorXML中的结构的一些东西。
Color在我看来,这比遮盖主要财产更好。任何建议欢迎。
该
XmlColor班主要依赖
implicitoperator语言功能来提供关键数据tranformations。没有这个,该类基本上是无用的。添加了其他功能来完善该类。
该
XmlColor助手还提供了一个方便的方式来单独颜色分量。我添加了
Alpha属性来显示这一点。请注意,
Alpha如果将组件一直弯曲到255,则不会对其进行序列化。
反序列化
Web颜色值将合并
Alpha当前存储在实例中的值。属性的解析顺序无关紧要。如果
AlphaXML源中缺少该属性,那么将使用实例组件值来设置
Alpha级别。可以说这是有缺陷的。但是,对于XML序列化,
XmlColor该类将通过
Color.Black将设置
Alpha为255进行初始化。
我正在VS2010环境中工作,并针对.Net 4进行构建。我不知道该代码与先前版本的兼容性如何。
这是一个应序列化为XML的示例属性:
[XmlElement(Type=typeof(XmlColor))] public Color MyColor { get; set; }
这是
XmlColor帮助程序类:
public class XmlColor{ private Color color_ = Color.Black; public XmlColor() {} public XmlColor(Color c) { color_ = c; } public Color ToColor() { return color_; } public void FromColor(Color c) { color_ = c; } public static implicit operator Color(XmlColor x) { return x.ToColor(); } public static implicit operator XmlColor(Color c) { return new XmlColor(c); } [XmlAttribute] public string Web { get { return ColorTranslator.ToHtml(color_); } set { try { if (Alpha == 0xFF) // preserve named color value if possible color_ = ColorTranslator.FromHtml(value); else color_ = Color.FromArgb(Alpha, ColorTranslator.FromHtml(value)); } catch(Exception) { color_ = Color.Black; } } } [XmlAttribute] public byte Alpha { get { return color_.A; } set { if (value != color_.A) // avoid hammering named color if no alpha change color_ = Color.FromArgb(value, color_); } } public bool ShouldSerializeAlpha() { return Alpha < 0xFF; }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)