【问题标题】:Cannot Serialize SolidColorBrush无法序列化 SolidColorBrush
【发布时间】:2013-12-13 15:09:44
【问题描述】:

我无法序列化类的错误消息,因为无法序列化 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();
    }
}

【问题讨论】:

    标签: .net wpf serialization


    【解决方案1】:

    你没有说你是如何序列化类的,但你可能可以通过属性来装饰Brush 属性或其支持字段,例如NonSerializedXmlIgnore

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

    【讨论】:

    • 谢谢乔,我会尝试并序列化十六进制。如果我有问题,我会发布代码。
    • 修复方法是完全删除 Brush,并使使用此类的类将十六进制转换为 Brush
    • 我说得太早了。即使我尝试从十六进制创建画笔然后冻结它,它也会破坏后台工作人员。但它运行了一段时间,这就是为什么我将答案标记为正确。
    • 旧帖子,但如果你们还在……对于 SolidColorBrush 来说,这是一个相当简单的解决方案,只需存储十六进制值。但是对于渐变画笔,要存储的信息要多得多。是否可以强制对不可序列化的复杂类型进行序列化?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 2022-01-23
    • 2011-07-19
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多