无法序列化SolidColorBrush

时间:2013-11-27 19:39:04

标签: .net wpf serialization

我无法序列化类的错误消息,因为无法序列化SolidColorBrush

该类具有Brush

的公共属性

有修复吗?

它更复杂 我尝试使用可以序列化的支持属性 问题是我还需要冻结HighLight,这样我就可以在BackgroundWorker上创建了 如果我为HighLight使用可序列化的后备属性,则Highlight.Freeze失败

[Serializable()]
public class WordIdLenHightlight : Object
{
    private string highlightHex;
    public Int32 ID { get; private set; }
    public Byte Len { get; private set; }
    //[NonSerialized]
    public Brush Highlight { get;  private set; }
    //{ if (string.IsNullOrEmpty(highlightHex)) return null; else return new SolidColorBrush((Color)ColorConverter.ConvertFromString(highlightHex)); }
    public string HighlightHex { get { return highlightHex; } }
    public override bool Equals(Object obj)
    {
        // Check for null values and compare run-time types.
        if (obj == null) return false;
        if (!(obj is WordIdLenHightlight)) return false;
        WordIdLenHightlight comp = (WordIdLenHightlight)obj;
        return (comp.ID == this.ID);
    }
    public override int GetHashCode()
    {
        return ID;
    }
    public WordIdLenHightlight(WordIdLenHightlight w) 
    { 
        ID = w.ID; Len = w.Len; 
        Highlight = w.Highlight;
        highlightHex = w.Highlight.ToString();
        Highlight.Freeze(); 
    }
    public WordIdLenHightlight(Int32 id, byte len, Brush highlight) 
    { 
        ID = id; Len = len; 
        Highlight = highlight; 
        //highlightHex = Highlight.ToString();
        Highlight.Freeze(); 
    }
    public WordIdLenHightlight(Int32 id, byte len, string HighlightHex) 
    {
        highlightHex = HighlightHex;
        ID = id; 
        Len = len;
        Highlight = new SolidColorBrush((Color)ColorConverter.ConvertFromString(highlightHex));
        Highlight.Freeze();
    }
}

1 个答案:

答案 0 :(得分:2)

您没有说明如何序列化类,但您可以通过BrushNonSerialized等属性来装饰XmlIgnore属性或其支持字段。< / p>

您可能希望序列化一些其他信息,而不是使您能够在反序列化时重建Brush,例如,它的颜色。

相关问题