Entwickler-Ecke

WPF / Silverlight - Serialization Problem beim Speichern von Brush in IsolatedS.


alegria - Mi 16.02.11 15:20
Titel: Serialization Problem beim Speichern von Brush in IsolatedS.
Hey!

Kann eine bestimmte Klasse (mit Brush) nichts als Objekt in den IsolatedStorage abspeichern. Der mir nicht viel sagende Fehlertext lautet:
Zitat:
Der Typ "System.Windows.Media.Transform" kann nicht serialisiert werden. Kennzeichnen Sie ihn ggf. mit dem Attribut "DataContractAttribute", und kennzeichnen Sie alle zu serialisierenden Member des Typs mit dem Attribut "DataMemberAttribute". Alternativ können Sie sicherstellen, dass der Typ öffentlich ist und über einen parameterlosen Konstruktor verfügt - in diesem Fall werden alle öffentlichen Member des Typs serialisiert, und es sind keine Attribute erforderlich.


Beispielcode zwecks Reproduktion...
XAML

XML-Daten
1:
2:
3:
4:
<Grid x:Name="LayoutRoot" Background="White">
    <Rectangle Width="50" Height="50" Stroke="Black" Fill="{Binding Path=myColor}"></Rectangle>
    <TextBlock Text="{Binding myText}" ></TextBlock>
</Grid>


CODEBEHIND

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
public partial class MainPage : UserControl
    {
        public ObservableCollection<myClass> myColl;
        public MainPage()
        {
            InitializeComponent();
            Application.Current.Exit += new EventHandler(Current_Exit);
            myColl = new ObservableCollection<myClass>();

            if (IsolatedStorageSettings.ApplicationSettings.Contains("mySettings"))
            {
                myColl = (ObservableCollection<myClass>)IsolatedStorageSettings.ApplicationSettings["mySettings"];
            }
            else {
                myColl.Add(new myClass { myText = "alpha", myColor = new SolidColorBrush(Colors.Orange) });
            }
          
            this.DataContext = myColl[0];
        }

        void Current_Exit(object sender, EventArgs e)
        {
            IsolatedStorageSettings.ApplicationSettings["mySettings"] = myColl;
            try
            {
                IsolatedStorageSettings.ApplicationSettings.Save();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Fehler beim Speichern des Objektes! --> " + ex.Message);
            }
        }
    }

    public class myClass
    {
        public string myText { get; set; }
        public SolidColorBrush myColor { get; set; }
    }


Jemand eine Idee oder besser noch Lösung???

Danke im Voraus...


Kha - Mi 16.02.11 15:41

user profile iconalegria hat folgendes geschrieben Zum zitierten Posting springen:
Der mir nicht viel sagende Fehlertext
In dem Brush steckt ein Transform, und die Klasse kann nicht serialisiert werden :nixweiss: ? Überlege dir einmal, ob du wirklich den gesamten Brush speichern musst.


alegria - Mi 16.02.11 16:48

Einfach string als Property nutzen und dann im Binding einen Converter einsetzen...

Warum ich da nicht eher drauf gekommen bin... ;)