CollectionBase XML serialisieren?

jccTeq

Erfahrenes Mitglied
Hi Leute,

ich hab eine Klasse namens "Versionen", die von CollectionBase abgeleitet ist, um entsprechende Collection-Features zur Verfügung zu stellen. Die Collection beinhaltet nur Objekte einer weiteren Klasse namens "Version". Ein Objekt der Klasse "Version" lässt sich problemlos (de-)serialisieren mit dem XmlSerializer.

Allerdings nicht die Klasse "Versionen".

Ich suche nun Informationen zum Thema Ableiten von CollectionBase und Serialisieren von CollectionBase-Klassen.

Wer da Informationen oder Erfahrungen auf dem Gebiet hat, bitte diesen Thread füttern. Danke!

Gruß,
Hendrik
 
Hallo jccTeq!

CollectionBase Klassen hab ich auch noch nicht serialisiert.
Kann mir aber auf Anhieb nicht vorstellen das es nicht klappen sollte. Hat die Klasse auch ihr Serializable-Attribut? Oder versuch es doch mal mit einem anderen Formatter.
Ansonsten muss ich leider passen.

MfG, cosmo
 
Hmm... das ist ganz schön tricky hab ich den Eindruck. Also .NET hat durchaus seine Nachteile.

So, CollectionBase serialisieren... also die letzte Möglichkeit - von der ich aber vorerst gaaaaanz weit Abstand nehmen möchte - ist die, IXmlSerializable selbst zu implementieren. Damit kann man ja so gut wie jedes Objekt serialisieren. Aber das will ich nicht. Noch nicht! Solange ich die Hoffnung habe, daß das auch automatisch mit ein paar Kniffen von .NET aus geht.

Wer weiß wie das geht, der möge dies hier bitte erklären! Danke!
 
Ich würde sagen das der SOAP-Formatter, den ich sowieso fast nur verwende, die richtige Wahl ist. Alle Referenzen bleiben erhalten. Ich sehe da jetzt keine besonderen Vorgehensweisen.
jccTeq hat gesagt.:
Ob hier Erweiterungen möglich sind in Bezug auf foreach und so weiter, ...
Was meinst Du damit?
 
Was meinst Du damit?

Die Funktionen Count und Current und Reset und MoveNext zu implementieren. Funktioniert auch. Man muss bei den Funktionen, die als Properties implementiert werden (z.B. Current) nur [XmlIgnore] vorschreiben, wenn man vorhat, die Klasse tatsächlich zu (de-)serialisieren.


Das mit dem SOAP Formatter kannst du mir noch mal detailierter aufzeigen? Wäre nett.
 
Es steht in dem Beispiel weiter unten genau beschrieben:
Code:
// Die Orte SOAP-Serialisieren (ohne Ausnahmebehandlung)
string fileName = "C:\\temp\\Cities.xml"; 
SoapFormatter soapFormatter = new SoapFormatter();
FileStream fileStream = new FileStream(fileName, FileMode.Create);
soapFormatter.Serialize(fileStream, cities);
fileStream.Close();

// Die Orte wieder deserialisieren
fileStream = new FileStream(fileName, FileMode.Open);
cities = (Cities)soapFormatter.Deserialize(fileStream);
fileStream.Close();
cities = Deine Klasse:CollectionBase;

Ober meintest Du jetzt was anderes?

Funktionen, welche ich als Properties implementiert habe musste ich noch nicht mit [XmlIgnore] versehen. Ist das vielleicht ein Attribut des XmlSerializer's?
 
Ist das vielleicht ein Attribut des XmlSerializer's?

Ja, das ist es. Du musst das Attribut benutzen, wenn du Public Properties implementiert, die in der resultierenden XML Datei nicht auftauchen sollen, sprich, die der Serializer ignorieren soll. Wenn du dies mit der Property Count zum Beispiel nicht tust, dann wirst du ein Element "Count" in deinem XML Baum wiederfinden. Nicht sehr schön, aber lässt sich mit XmlIgnore idealerweise sehr einfach verhindern.

Ich bin (leider?) vorgabenmäßig dazu verdonnert, als resultierendes Datei-Format XML zu erstellen. Von daher werde ich Soap wohl nur mal der Befriedigung meiner Neugierde wegen ausprobieren. Danke dafür!
 

Neue Beiträge

Zurück