Serialisierung - welche Strategie
-
Hallo Experten,
ich habe einige verwandte Objekte in einer Collection.
using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace Test_Xml { public class MyFantasticBaseClass { private int _id = 0; public MyFantasticBaseClass(int id) { this._id = id; } public int Id { get { return (_id); } } } public class FirstDerivedClass : MyFantasticBaseClass { private bool _isReallyUseful = true; public bool IsReallyUseful { get { return (_isReallyUseful); } set { _isReallyUseful = value; } } } public class SecondDerivedClass : MyFantasticBaseClass { private double _zoom = 1.0; private MyFantasticBaseClass _linkedElement = null; public double Zoom { get { return (_zoom); } set { _zoom = value; } } public MyFantasticBaseClass LinkedElement { get { return (_linkedElement); } set { _linkedElement = value; } } } public class MyFineCollection:ICollection<MyFantasticBaseClass> { List<MyFantasticBaseClass> _innerList = new List<MyFantasticBaseClass>(); // ICollection implementation details } }
Die möchte ich speichern und später wieder laden. Der lesbarkeit der Dateien halber soll das in XML-Dateien geschehen.
Ich habe bereits früher Daten als XML gespeichert, allerdings waren die nie in einer Vererbungshierarchie gekapselt. Für diese bloße Sammlung von int- und double-Werten tat es folgender Code innerhalb des DataStorageObject:
// Save data to xml file using (System.IO.StreamWriter saveStream = new System.IO.StreamWriter(filename)) { if (!System.IO.File.Exists(filename)) System.IO.File.Create(filename); System.Xml.Serialization.XmlSerializer saveSerializer = new System.Xml.Serialization.XmlSerializer(typeof(DataStorageObject)); saveSerializer.Serialize(saveStream, this); saveStream.Close(); }
Das funktionierte ganz ohne XSD oder DTD.
War das pures Glück oder kann ich getrost weiterhin auf Schemadefinitionen verzichten?
In
http://msdn.microsoft.com/de-de/library/ty01x675
las ich, dass in .NET zwei Möglichkeiten der Serialisierung vorgesehen sind.
Hat jemand Erfahrungen damit, ob es besser ist, in jedem abgeleiteten Objekt vier Methoden mit jeweils einem der AttributeOnDeserializedAttribute,
OnDeserializingAttribute,
OnSerializedAttribute oder
OnSerializingAttributezu versehen oder lieber die Schnittstelle ISerializable inklusive der Methoden
ctor(SerializationInfo info, StreamingContext context) und
GetObjectData() zu implementieren?Mit freundlichem Gruß,
luker
-
http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=236
Wichtige Information für Serialisierung mit XML. Alle, aber auch alle deine Werte die du Serialisieren willst müssen, öffentliche Getter wie Setter haben.Es muss ein Standardmäßiger öffentlicher Ctor vorhanden sein.
Aber Code oben sollte dir helfen.