繁体   English   中英

如何在C#中使用xmlserializer自定义xml?

[英]How to customize the xml using xmlserializer in C#?

我有以下课程:

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" />

我怎么能得到那个结果?

XML序列化程序正在使用字节数组序列化Color。 所以结果很奇怪。

我的建议是使用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转换为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);
}

还有一种用于从字符串分配颜色的类似方法。

希望能帮助到你-

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM