Laden...

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

Erstellt von Diablo vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.026 Views
D
Diablo Themenstarter:in
47 Beiträge seit 2011
vor 11 Jahren
KlassenObjekt übergeben und mit Object annehmen - wie möglich?

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?

S
417 Beiträge seit 2008
vor 11 Jahren

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.

D
Diablo Themenstarter:in
47 Beiträge seit 2011
vor 11 Jahren

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)

S
417 Beiträge seit 2008
vor 11 Jahren

Über das Deserialize des Formatters bekommst du ja immer ein object. Das musst du halt dann entsprechend casten.

A
15 Beiträge seit 2012
vor 11 Jahren

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);
}