Speichern von Objekten



  • Hallo, wir möchten gerne unsere erstellten Objekte (der Klasse Benutzer) abspeichern. Nach längerer Suche sind wir schließlich auf die XML-Speichermethoden gestoßen.
    Diese lassen sich auch ohne Fehler ausführen, allerdings ist das einzige was er abspeichert folgendes:

    <?xml version="1.0" encoding="utf-16"?>
    <Benutzer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    

    Der dazugehörige Code ist folgender:

    private: System::Void speichern_Click(System::Object^  sender, System::EventArgs^  e) {
    			 array<Benutzer^>^ benutzer = Stat_saves::benutzer;
    			Benutzer^ bnz = benutzer[0];
    			Type^ typ =  bnz->GetType();
    			MessageBox::Show(""+typ + " " + bnz->getName());
    			XmlSerializer^ ser = gcnew XmlSerializer(typ);
    			FileStream^ str = gcnew FileStream("Benutzer.xml", FileMode::CreateNew);
    			ser->Serialize(str, bnz);
    			str->Close();
    

    Die Klasse Benutzer:

    public ref class Benutzer {
    	//Die ID des Benutzer (gleichzeitig die Reihenfolge in einer Runde)
    	int id;
    	//Array mit allen Siedlungen und Städten des Benutzers
    	array<Gebaeude^>^ gebaeude;
    	//array mit allen Straßen des Benutzers
    	array<Strasse^>^ strassen;
    	...
    

    Er speichert also rein garnichts außer dem Namen der Klasse (Benutzer). Diese Speicherform haben wir testweise ebenfalls mit einer anderen Klasse getestet, in welcher nur int/Strings gespeichert werden, da wir vermutet hatten das evtl. an den in Benutzer gespeicherten arrays von eigenen Klassen liegt, allerdings hatten wir dort dieselben Probleme.

    Nun ist die Frage, wie wir unsere Objekte am besten abspeichern und ob sich dafür überhaupt XML eignet, bzw. was wir an dem vorhanden Code ändern müssen.

    mfg Die Cataner



  • Der XML-Serialisierer speicher nur ab, wenn die Fields/Properties *public* sind!



  • Danke Jochen, es hat geklappt.

    Vielen Dank ! ! !

    Catan3


Anmelden zum Antworten