问题
Error message that I cannot serialize a class because cannot serialize SolidColorBrush
The class has a public property of Brush
Is there a fix?
It is more complex.
I tried using a backing property that can be serialized
Problem is that I also need to Freeze the HighLight so I can be created on a BackgroundWorker
If I use a serializable backing property for HighLight then Highlight.Freeze fails
[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:
You don't say how you're serializing the class, but you can probably decorate the Brush
property or its backing field by an attribute such as NonSerialized
or XmlIgnore
.
You might want to serialize some other information than enables you to reconstruct the Brush on deserialization, for example, its color.
来源:https://stackoverflow.com/questions/20251564/cannot-serialize-solidcolorbrush