Entwickler-Ecke

Sonstiges (.NET) - XML-Serialization mit TimeSpan


ebber - Di 27.01.09 15:06
Titel: XML-Serialization mit TimeSpan
Hallo,

ich wollte meine Klasse in XML abspeichern. Ein Problem das ich festgestellt hatte war, dass das ganze keinen TimeSpan unterstützt. Ich habe dann auch im Internet gelesen, dass das mit TimeSpan nicht funktioniert.

Das einzige was man speichern könnte wäre die TimeSpan.Duration und diese dann auch entsprechend wieder einlesen; Wäre eigentlich kein Problem.

Das Problem ist aber, dass ich eine List<meinerKlasse> an eine Tabelle geDataBindet habe. Also kann ich an der Klasse nicht wirklich was ändern.


Noch ein bisschen Code:

Das Speichern:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
        private bool SaveSer(List<Film> ls)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<Film>));

            StreamWriter writer = new StreamWriter("File.xml");

            serializer.Serialize(writer, ls);
            writer.Close();

            return true;
        }


Ausschnitt aus der Klasse:


C#-Quelltext
1:
2:
3:
4:
5:
public class Film
    {
        public string Titlee { get; set; }
        public TimeSpan Length { get; set; }
    }


Kann ich irgendwie beim Speichern die TimeSpan in eine TimeSpan.Duration umwandeln oder hätte irgend jemand eine andere Idee?

MfG


Kha - Di 27.01.09 16:53
Titel: Re: XML-Serialization mit TimeSpan
user profile iconebber hat folgendes geschrieben Zum zitierten Posting springen:
Das Problem ist aber, dass ich eine List<meinerKlasse> an eine Tabelle geDataBindet habe.
Ein DataGridView? Dann musst du eben auf AutoGenerateColumns verzichten (sowieso nur ein nettes RAD-Feature), dann kannst du deine neue "LengthInSecs"-Property ausblenden.

PS: Wenn XML kein Muss ist: mit einem BinarySerializer hat man weniger Scherereien ;) .


ebber - Di 27.01.09 17:16

Es ist das Xceed DataGrid, aber da kann man das sicher auch ausblenden. (Bzw. habe gerade nachgeschaut, geht)

Angenommen ich mache das, kann ich bei set und get der "LengthInSecs" automatisch die TimeSpan setzen?

Die Frage ist jetzt nur, wie sage ich, dass ich die TimeSpan nicht serialisieren will?


Kha - Di 27.01.09 17:35

user profile iconebber hat folgendes geschrieben Zum zitierten Posting springen:
Angenommen ich mache das, kann ich bei set und get der "LengthInSecs" automatisch die TimeSpan setzen?
Bin mir nicht sicher, was du meinst, aber im Getter eben TimeSpan.Seconds und im Setter TimeSpan.FromSeconds.
user profile iconebber hat folgendes geschrieben Zum zitierten Posting springen:
Die Frage ist jetzt nur, wie sage ich, dass ich die TimeSpan nicht serialisieren will?
XmlIgnoreAttribute :)


ebber - Di 27.01.09 17:54

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconebber hat folgendes geschrieben Zum zitierten Posting springen:
Angenommen ich mache das, kann ich bei set und get der "LengthInSecs" automatisch die TimeSpan setzen?
Bin mir nicht sicher, was du meinst, aber im Getter eben TimeSpan.Seconds und im Setter TimeSpan.FromSeconds.

Ja genau das hatte ich gemeint, war zugegebenerweise ein wenig zu kompakt formuliert.

Das andere scheint nun alles zu funktionieren.
Einfach [XmlIgnore] über die Property.

MfG