Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
KlassenObjekt übergeben und mit Object annehmen - wie möglich?
Diablo
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

KlassenObjekt übergeben und mit Object annehmen - wie möglich?

beantworten | zitieren | melden

Hallo,

ich wollte gerade eine Klasse "Serializer" bauen. Diese soll eine List mit einem Klassenobjekt annehmen und dort weiter verarbeiten.

Nun soll die Klasse Serializer aber 2 verschiedene Klassenobjekte annehmen können (und die selben arbeiten vollrichten).

Jetzt ist mein Ansatz folgendermaßen:

public class Serializer
    {
        static string ObjectListPath = Application.StartupPath + "\\" + "Settings.conf";

        public static void SerializeObject(List<Object> listObject)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            Stream output = File.Create(ObjectListPath);
            formatter.Serialize(output, listObject);
            output.Close();
        }
}

Wenn ich aber nun eine List mit einem KlassenObjekt übergebe, bekomme ich (natürlich?) eine Fehlermeldung.

Serializer.SerializeObject(settingsListObj);

Nämlich das die Methode ungültige Argumente hat. Würde die Methode "List<Setting> listObject" annehmen - würde es funktionieren.

Ich wollte aber gerne nur eine Klasse haben, die 2 Gleiche Dinge (außer die verschiedenen Objekte) ausführt.

Wie kann ich das realisieren? Kann man so ein Object in ein KlassenObject casten?
private Nachricht | Beiträge des Benutzers
Sarc
myCSharp.de - Member



Dabei seit:
Beiträge: 426

beantworten | zitieren | melden

Also wenns dir nur um serialisieren geht und du das übergebene objekt nicht anderweitig auswertest, dann nimm doch einfach als Parametertyp object:

public static void SerializeObject(object o)
Dann kannst du da jeden beliebigen typ übergeben.
private Nachricht | Beiträge des Benutzers
Diablo
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

beantworten | zitieren | melden

Top das klappt!

Und wie mache ich das dann mit dem Deserialisieren? Weil da müsste später eine Liste mit dem deserialisierten Objekt raus kommen.

EDIT: Glaube ich habs:

 Object settings2 = Serializer.DeserializeObject();
            settingList = (List<Setting>)settingList2;

(Variablennamen nur Testweise)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Diablo am .
private Nachricht | Beiträge des Benutzers
Sarc
myCSharp.de - Member



Dabei seit:
Beiträge: 426

beantworten | zitieren | melden

Über das Deserialize des Formatters bekommst du ja immer ein object. Das musst du halt dann entsprechend casten.
private Nachricht | Beiträge des Benutzers
Ace86
myCSharp.de - Member



Dabei seit:
Beiträge: 15

beantworten | zitieren | melden

Du kannst auch eine generische Methode erstellen, so dass die Methode dir gleich das richtige Objekt zurück gibt.

settingList = Serializer.deserializeObject<List<Setting>>();

die Methode dazu sieht dann in etwa so aus

public static T deserializeObject<T>()
{
    ...

    return (T)formatter.Deserialize(stream);
}
private Nachricht | Beiträge des Benutzers