2種類のColor構造体のシリアライズとstring変換

C#には二種類のColor構造体があり、情報にたどり着くのが手間だったのでまとめてみました。
以下、usingを使用していないので少し冗長なサンプルコードになっていますが、実際はusing System.Windows.Mediaを使ってます。

System.Drawing.Color 構造体
http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=JA-JP&k=k%28System.Drawing.Color%29;k%28TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5%29;k%28DevLang-csharp%29&rd=true

System.Windows.Media.Color 構造体
http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=JA-JP&k=k%28System.Windows.Media.Color%29;k%28TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5%29;k%28DevLang-csharp%29&rd=true

従来のWindows Formsアプリケーション等で使用されているColor構造体であるSystem.Drawing.Colorとstring型との相互変換

// 従来の Color <-> string 変換
System.Drawing.Color winColor = System.Drawing.Color.FromArgb(255, 255, 0, 0);
// to String
string winColorString = winColor.ToString();
// from String
System.Drawing.Color winColorSave = System.Drawing.ColorTranslator.FromHtml(winColorString);

WPFで使用されるColor構造体であるSystem.Windows.Media.Colorとstring型との相互変換

// WPFの Color <-> string 変換
System.Windows.Media.Color wpfColor = System.Windows.Media.Colors.Red;
// to String
string wpfColorString = wpfColor.ToString();
// from String
System.Windows.Media.Color wpfColorSave = 
    (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString(wpfColorString);

Colorクラスはダイレクトにシリアライズすることが出来ませんが、これを使用すると、アクセサ内でstring型に変換するプロパティを作成してシリアライズすることが出来ます。シリアライズの時のみ使用して、普段はColor構造体を直接操作すれば処理オーバーヘッド無し。

以下のサイトをそのまま参考にしました。K.Takaokaさんのコードです。
https://social.msdn.microsoft.com/Forums/ja-JP/de34aa14-ea7b-4190-88a9-6cba0c7680ef/colorxmlserializer?forum=csharpexpressja
どうでもいいけど、K.Takaokaさんの回答がベストアンサーになっていないのがかわいそう。

[field:NonSerialized]
private System.Windows.Media.Color winColor = System.Windows.Media.Colors.Red;

//[DataMember] // エラーが出る(実際にやってみると出来たりするのが謎)
[XmlIgnore]
public System.Windows.Media.Color WinColor
{
    get
    {
        return winColor;
    }
    set
    {
        winColor = value;
    }
}

[DataMember]
[XmlElement]
public string WinColorString
{
    get
    {
        return WinColor.ToString();
    }
    set
    {
        WinColor = (System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString(value); 
    }
}