| 

.NET C# Java Javascript Exception

4
Ich habe eine Winforms Treeview, wo in den Knoten in jeder TreeNode.Tag-Property wiederum eigene Objekte hinterlegt sind. Es gibt zudem sehr viele unterschiedliche Objekte in den Knoten.
Ich möchte nun diese Treeview Serialisieren (Binär oder als XML-File), sprich speichern und später wieder Deserialisieren (rekonstruieren). Dazu gibt es ja viele beschriebene Möglichkeiten, die ich im Netz gefunden habe. Am kürzesten erscheint mir folgende Lösung:
http://stackoverflow.com/questions/5868790/saving-content-of-a-treeview-to-a-file-and-load-it-later.
Das funktioniert soweit ganz gut, wenn in den TreeNode.Tag Properties keine Objekte liegen. Ich habe auch allen Klassen das [Serializable] Attribute gegeben. Beim Deserializieren bekomme ich aber nun die Fehlermeldung "End of Stream encountered before parsing was completed".
Was fehlt hier noch? Was mache ich falsch.
Außerdem würde mich generell interessieren, wie ich eine Treeview ohne großen Programmieraufwand komplett (inkl aller eingebetteter Objekte) persistent machen kann bzw. welche Möglichkeiten es dazu gibt!?
22.08.2013
mober 323 1 8
1 Antwort
4
Eine TreeView persistent zu machen, ist in meinen Augen generell der falsche Weg. Wenn ich an Persistenz denke, denke ich nicht an ein UI Element. Wenn ich im Zusammenhang mit einem UI Element an Persistenz denke, dann vlt. hinsichtlich seiner eigenen Attribute, wie z.B. Größe, Farbe, Position, etc. - also alles, was der User an der View verändern könnte und das Programm für ihn abspeichern soll.
Was Du imho eigentlich möchtest, ist eine hierarchische Datenstruktur persistieren. Diese sollte aber zwingend unabhängig Ihrer visuellen Repräsentation existieren. Die TreeView ist dann nur eine Sicht auf diese Daten. Von diesem Moment an hast Du nicht mehr das Problem, ein UI Element serialisieren zu müssen, sondern bewegst Dich auf der fachlichen Ebene. Die Datenstruktur lässt sich auch wesentlich leichter automatisiert testen, als das mit einem UI Element möglich ist. Und die Serialisierungsproblematik beschränkt sich auf das wirklich Notwendige.

Hinsichtlich der Fehlermeldung beim Deserialisieren kann ich im Moment leider nichts sagen.

Als schnelle Lösung kannst Du als Alternative den DataContractSerializer in Betracht ziehen. Der kann zumindest mit generischen Collections umgehen. Würde ich aber auch weitgehend als schnellen Hack einstufen.
22.08.2013
ffordermaier 8,4k 3 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH