栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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; }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470689.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号