无法序列化SolidColorBrush。

3

错误信息:无法序列化类,因为无法序列化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个回答

3

您没有说明如何序列化该类,但是您可以通过像 NonSerializedXmlIgnore 这样的属性来装饰 Brush 属性或其支持字段。

您可能希望序列化一些其他信息,以便在反序列化时重新构建画笔,例如它的颜色。


谢谢Joe,我会尝试将其序列化成十六进制。如果出现问题,我会发布代码的。 - paparazzo
修复的方法是完全删除 Brush,并让使用此类的类将十六进制转换为 Brush。 - paparazzo
我说得太早了。即使我尝试从十六进制创建画笔并将其冻结,它仍会破坏后台工作程序。但是它运行良好了一段时间,这就是为什么我标记答案为正确的原因。 - paparazzo
旧帖,但如果你们还在的话……对于SolidColorBrush,这是一个相当简单的解决方案,只需存储十六进制值即可。但对于渐变刷子来说,需要存储的信息量要大得多。是否可能强制序列化非可序列化复杂类型? - William Thomas Waller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接