2013-11-27 3 views
2
сообщения об ошибке

, что я не могу сериализовать класс, потому что не может сериализовать SolidColorBrushне может сериализовать SolidColorBrush

Класса имеет общественное свойство Brush

Есть ли исправить?

Это сложнее.
Я попытался с помощью свойства подложки, которая может быть сериализована
Проблемы в том, что мне также нужно заморозить изюминку, чтобы я мог быть создан на BackgroundWorker
Если я использую сериализуемое подкладочное свойство для кульминационного тогда 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(); 
    } 
} 

ответ

2

вы не говорите, как вы сериализацию класса, но вы, вероятно, можете украсить Brush имущество или его подкладочное поле с помощью атрибута, таких как NonSerialized или XmlIgnore.

Возможно, вам понадобится сериализовать другую информацию, кроме того, что вы можете восстановить кисть при десериализации, например, ее цвет.

+0

Спасибо Джо, я попробую это и сериализую шестерку. Если у меня возникнут проблемы, я отправлю код. – Paparazzi

+0

Я отправил код. Теперь у меня проблема с Freeze. – Paparazzi

+0

Исправление состоит в том, чтобы полностью удалить Brush и сделать классы, используя этот класс, преобразовать шестерку в кисть – Paparazzi

Смежные вопросы