serialisierung.....
-
hi, ich mache meine ersten "gehversuche" mit der serialisierung.
in meinem schlauen buch "GoTo C#" steht, dass es zwei möglichkeiten zur
serialisierung gibt. Die eine mit Attributen - die zweite mit dem Interface
ISerializable.Die u.a. testklasse funktioniert mit dem Interface ISerializable wunderbar.
Nun wollte ich das auch mal mit Attributen testen.
Das Serialisieren funktioniert wunderbar - nur hab ich nun keinen dunst,
wie ich das wieder deserialisieren kann.
Ich möchte nicht, wie in meinem buch, die (de-)serialisierung aus einer anderen klasse aufrufen - sondern intern handhaben können, so dass die klasse z.b. im konstruktor die daten laden, bzw. bei änderung eines wertes die daten serialisieren (wenn nötig) kann.mir ist klar, dass
this = (Test)bf.Deserialize(fs);
nicht funktionieren kann und suche daher nach einer anderen, besseren vor allem FUNKTIONIERENDEN möglichkeit.
Vielleicht kann mir jemand diesbezüglich irgendwelche tipps geben.DANKE !
using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; namespace serialisierung { [Serializable] public class Test { private long lTestValue1; private long lTestValue2; [NonSerialized]private static BinaryFormatter bf; static Test() { bf = new BinaryFormatter(); } public Test() { lTestValue1=10; lTestValue2=10; // eben mal testmässig was schreiben Serialize(); // testausgabe Console.WriteLine("Nach Serialisierung:\n\nWert 1:" + lTestValue1.ToString()+"\nWert 2:"+lTestValue2.ToString()+"\n\n"); // ändern, um nach deserialisierung prüfen zu können, ob daten geladen wurden lTestValue1=0; lTestValue2=0; DeSerialize(); // testausgabe Console.WriteLine("Nach Deserialisierung:\n\nWert 1:" + lTestValue1.ToString()+"\nWert 2:"+lTestValue2.ToString()); Console.ReadLine(); } public void Serialize() { FileStream fs = new FileStream("data.dat",FileMode.OpenOrCreate,FileAccess.Write); bf.Serialize(fs,this); fs.Flush(); fs.Close(); } public void DeSerialize() { FileStream fs = new FileStream("data.dat",FileMode.Open,FileAccess.Read); // was muss ich hier machen ??????? bf.Deserialize(fs); fs.Close(); } } }
-
Wenn du es unbedingt so machen möchtest könntest du in ein temporäres Objekt deserialisieren und dann die Werte des temporären Objekts deinen Objekt zuweisen, aber für so ne Art ist es sicherlich besser mit dem ISerializable Interface zu arbeiten da du so im Konstruktor dierekt auf die verschiedenen Werte zugreifen kannst, und du nicht den Umweg über ein temporäres Objekt gehen musst.