2012-04-26 6 views
2

私は次のクラスがあります:私は、XMLシリアライザを使用して、その結果取得していますC#でxmlserializerを使用してxmlをカスタマイズする方法は?

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

を:私は結果になりたいながら

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

を:

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

どのようにすることができますその結果を得る?

+0

http://stackoverflow.com/questions/1075860/c-sharp-custom-xml-serialization、http://stackoverflow.com/questions/3109827/custom-xml-serialization 、http://stackoverflow.com/questions/10292084/custom-xml-serialization – WhiteKnight

答えて

1

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

:あなたはbyte[]Colorを変換する必要がある場合も無視byte[]としての色を取得するために、追加のプロパティを追加することができますが[XmlIgnore]属性です。

ColorTranslator.ToHtmlが提供する形式があなたのために有効でない場合は、たとえば

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

と文字列から色をparsignためのための同様の方法のために、カスタムカラー変換を使用することができます。

はそれがhelps-ホープ

関連する問題