2

我有以下课程:

public class DisplayFunction 
    {
        [System.Xml.Serialization.XmlAttribute()]
        public byte[] Color
        {
            get;
            set;
        }
        [System.Xml.Serialization.XmlAttribute()]
        public FunctionShape Shape
        {
            get;
            set;
        }
        [System.Xml.Serialization.XmlAttribute()]
        public int Id
        {
            get;
            set;
        }
}

我正在使用 xml 序列化程序并得到结果:

<DisplayFunctions Color="et57hQ==" Shape="Bar" Id="514" />

虽然我希望结果是:

 <DisplayFunctions Color="122,222,123,133" Shape="Bar" Id="514" />

我怎样才能得到那个结果?

4

1 回答 1

1

XML 序列化程序正在使用字节数组对颜色进行序列化。所以结果很奇怪。

我的建议是使用类型的公共属性string来序列化颜色,然后使用转换将颜色转换为字符串,反之亦然。

string HtmlColor = System.Drawing.ColorTranslator.ToHtml(MyColorInstance);
string HtmlColor = System.Drawing.ColorTranslator.ToHtml(MyColorInstance);

因此,您需要以下内容:

  Color mColor;
  [XmlIgnore]
  public Color Color
  {
      get { return mColor; }
      set { mColor = value; }
  }

  [XmlElement("Color")]
  public string ColorStr
  {
      get { return ColorTranslator.ToHtml(Color); }
      set { Color = ColorTranslator.FromHtml(value); }
  }

注意:如果您需要将 转换Color为 a byte[],您可以添加一个附加属性以获取颜色作为byte[]也忽略[XmlIgnore]属性。

如果提供的格式ColorTranslator.ToHtml对您无效,您可以使用自定义颜色翻译,例如

public string ToCustomString(Color color)
{
    return string.Format("{0},{1},{2},{3}", color.A, color.R, color.G, color.B);
}

以及用于从字符串中分配颜色的类似方法。

希望能帮助到你-

于 2012-04-26T09:03:37.043 回答