Color结构的最优雅的XML序列化

Color结构的最优雅的XML序列化,第1张

Color结构的最优雅的XML序列化

这是我用于序列化

Color
XML中的结构的一些东西。
Color
在我看来,这比遮盖主要财产更好。任何建议欢迎。

XmlColor
班主要依赖
implicitoperator
语言功能来提供关键数据tranformations。没有这个,该类基本上是无用的。添加了其他功能来完善该类。

XmlColor
助手还提供了一个方便的方式来单独颜色分量。我添加了
Alpha
属性来显示这一点。请注意,
Alpha
如果将组件一直弯曲到255,则不会对其进行序列化。

反序列化

Web
颜色值将合并
Alpha
当前存储在实例中的值。属性的解析顺序无关紧要。如果
Alpha
XML源中缺少该属性,那么将使用实例组件值来设置
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; }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5462532.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存