ERLEDIGT
JA
JA
ANTWORTEN
16
16
ZUGRIFFE
890
890
EMPFEHLEN
-
Hallo liebe Gemeinde...
habe da mal ein kleines Problem im C#.
Ich habe beispielsweise eine Klasse:
Code :1 2 3 4
public class SystemVariablen { public string DBOrt, Name, Passwort; }
Diese Klasse will ich Serialisieren, was an sich keine Probleme macht. Womit ich aber Probleme habe ist die Idee, diese Klasse gleich mit Hilfe des Konsturktors zu deserialisieren.
Habe aus dem C# Buch vom Herdt Verlag das beispiel genommen:
Code :1 2 3 4 5 6 7 8 9 10
public object Laden(string Datei) { object Objekt; Datei = Application.StartupPath.ToString() + "\\" + Datei; FileStream fs = new FileStream(Datei, FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); Objekt=bf.Deserialize(fs); fs.Close(); return Objekt; }
und etwas umgeschieben. Die Funktion gibt als Rückgabewert das Objekt zurück, was ich deserialisiere. Dieses Muss ich dann nur noch Zuweisen:
Code :1
SystemVariablen SysVar = new Laden("datei.sys");
Mein Ziel ist es, dass dieses auch gleich automatisch über den Konstruktor der Klasse gelöst wird. Dass ich nur noch:
Code :1
SystemVariablen SysVar = new SystemVariablen();
eingeben muss, und die Klasse ist mit den Daten gefüllt, mit denen sie serialisiert wurde.
Dann noch eine Funktion der Klasse zugebastelt zum Serialisieren.
Hat Jemand eine Idee Oder einen anderen Weg
Mfg Mirco
-
In den Konstruktor gehört zwar normalerweise nichts was eine Exception auslösen kann, aber gut, in manchen Fällen geht es nicht anders.
Womit hast du denn dein Problem jetzt genau? Denn wenn das Deserialisieren funktioniert, sollte es egal sein, an welcher Stelle du das aufrufst. Ich hoff nur dass du den Code nicht wirklich aus einem Buch hast, denn dann solltest das Buch verbrennen und dir ein anderes kaufen:
Code :1 2 3 4 5 6 7 8 9 10
public SystemVariablen Laden(string Datei) { SystemVariablen var; Datei = Application.StartupPath + "\\" + Datei; FileStream fs = new FileStream(Datei, FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); var = (SystemVariablen)bf.Deserialize(fs); fs.Close(); return var; }
Mit Konstruktor meinst du vermutlich den Konstruktor deiner Form:
Hier halt dann einfach
Wobei du natürlich vorher mySysVars als private Member deklarieren musst:Code :1
mySysVars = Laden("sysvars.xml");
Vielleicht solltest auch darauf achten, in Zukunft deine Variablen und Funktionen Englisch zu halten, sowie ein wenig auf Coding-Styles zu achten. Macht alles ein wenig leichter und einfacher zu lesen.Code :1
SystemVariablen mySysVars = null;
-
Du meinst ich sollte über den Konstruktor der Form einfach die Klasse deserialisieren, ist natürlich auch eine Idee, probier ich dann mal aus.
-
Was hast du sonst damit gemeint?Diese Klasse will ich Serialisieren, was an sich keine Probleme macht. Womit ich aber Probleme habe ist die Idee, diese Klasse gleich mit Hilfe des Konsturktors zu deserialisieren.
-
Ich wollte die Deserialisierung gleich mit im Konstruktor der Klasse selber unterbringen.
Code :1 2 3 4 5 6 7 8 9
public class Test { public string Teststring; [indent]private void Test() { [indent]Deserialisieren der Klasse und Zuweisen des Teststrings [/indent] } [/indent] }
So in der Art, dass ich beim Instanzieren eines Objektes der Klasse gleich die Werte habe.
Vielleich denke ich auch falsch...
-
Ah so meinst das, ein Objekt, das sich selbst befüllt.
Ja auch kein Problem. dann solltest es aber mit seinem Klassennamen instanzieren und nicht mit object weil der Konstruktor ja nie aufgerufen wird.
Mach es einfach so:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
public class SystemVariablen { private string dBOrt; private string name; private string passwort; private string path; public string DBOrt { get { return this.dBOrt; } set { this.dBOrt = value; } } public string Name { get { return this.name; } set { this.name = value; } } public string Passwort { get { return this.passwort; } set { this.passwort = value; } } public string Path { get { return this.path; } set { this.path = value; } } public SystemVariablen() {} public void Init() { Hier deserialisieren und die Properties auffüllen. } }
Warum so? Nun, es ist für den Programmierer (dich, oder vielleicht auch einem anderen) einfacher, wenn er ohne jetzt die Klasse im Sourcecode zu kennen, weiß was passiert. Machst du das Einlesen im Konstruktor weiß er das nicht. Mittles Init() weiß er dass das Objekt initialisiert wird.
-
Ich fitz mich mal durch und probier es mal aus!!
Danke, wenn es probleme gibt, melde ich mch nochmal!!Geändert von Mircot (13.07.05 um 09:11 Uhr)
-
Ich bekomm die Schwämmchen...
Habe gerade einen Mircot.System.BlackOut()....
Kannst Du mir mal bitte ein Beispiel für die Betreffende Deserialisierung geben, ich weis nicht wie ich die Werte Zuweisen muss.....
Danke
-
Code :
1 2 3 4 5 6 7 8 9
SystemVariablen var; Datei = Application.StartupPath + "\\" + Datei; FileStream fs = new FileStream(Datei, FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); var = (SystemVariablen)bf.Deserialize(fs); fs.Close(); this.DbOrt = var.DbOrt; ...
-
OK,
ich habe jetzt folgende Klasse zusammengeschaubt. aber irgendwass geht net. Ich muss jetzt auch erstmal weg.
Kann sich ja jemand den Code mal anschauen. Ich habe das Problem das beim Instandzieren des Objekten die Variablen nicht initialisiert werden. Die klasse soll, wenn die Datei zum deserialisieren nicht da ist, die Variablen Leer übergeben.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
[Serializable()] public class SysVar { private string dBOrt; private string dBPasswort; private string dBName; private string lizenzName; private string lizenzNummer; public string DBOrt { get{ return this.dBOrt;} set{ this.dBOrt=value;} } public string DBName { get{ return this.dBName;} set{ this.dBName=value;} } public string DBPasswort { get{ return this.dBPasswort;} set{ this.dBPasswort=value;} } public string LizenzName { get{ return this.lizenzName;} set{ this.lizenzName=value;} } public string LizenzNummer { get{ return this.lizenzNummer;} set{ this.lizenzNummer=value;} } public SysVar() {} // Konstruktor public void Init() { try { SysVar MySysVar; string Datei = Application.StartupPath.ToString() + "\\wkv.sys"; FileStream fs = new FileStream(Datei, FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); MySysVar=bf.Deserialize(fs) as SysVar; fs.Close(); this.dBOrt = MySysVar.dBOrt; this.dBName = MySysVar.dBName; this.dBPasswort = MySysVar.dBPasswort; this.lizenzName=MySysVar.lizenzName; this.lizenzNummer= MySysVar.lizenzNummer; } catch { this.dBOrt = Application.StartupPath.ToString() + "\\test.mdb"; this.dBName = ""; this.dBPasswort = ""; this.lizenzName=""; this.lizenzNummer=""; } } }
bis später......
-
1. Application.Startup... wird nicht funktionieren. Du musst den Pfad an die Klasse übergeben. Hatte ich eigentlich auch drinnen, wurde von dir nicht übernommen -> Path. Deine Klasse kennt Application ja nicht.
2. Wenn du das so willst, dann musst du eben abfragen ob Werte etc. vorhanden sind, oder nicht. Das sollte nicht so schwer sein.
-
Hallo Leute was ist das eigenlich das Serialisieren bzw. das Deserialisierung?
Mfg
Reverent
-
Hallo Reverent!
Schonmal MrGoogle gefragt?

Im Gallileo OpenBook steht zB was dazu.
Und 'nen netten Thread gibts dazu auch.
Struktur in Datei speichern - Thread
MfG, cosmoMfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Wenn ich ehrlich bin erschien mir dieser Teil als normale Variable wie DBName usw..
Wieso ist path so wichtig?
public string Path
{
get { return this.path; }
set { this.path = value; }
}
-
Ich glaube ich habe es, kann das sein das wir im Konstruktor noch die Funtion init() aufrufen müssen
Ähnliche Themen
-
Deserialisierung in ein HashSet
Von AvS im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 8Letzter Beitrag: 27.04.09, 15:39 -
Konstruktor im Konstruktor
Von ZodiacXP im Forum JavaAntworten: 4Letzter Beitrag: 15.12.08, 16:33 -
Deserialisierung mehrerer Objekte (Shapes)
Von Hansguck im Forum JavaAntworten: 5Letzter Beitrag: 12.12.07, 22:19 -
Deserialisierung anzeigen
Von The_Answer1985 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 10Letzter Beitrag: 12.06.07, 10:17 -
Konstruktor im Konstruktor aufrufen?
Von zarrandreas im Forum .NET ArchivAntworten: 1Letzter Beitrag: 03.06.05, 16:45





Zitieren
Login





