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.


Anmelden zum Antworten