Programmcodebeispiele CSharp (C#)
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;
using System.Xml.Serialization;
using FCL_Buch;
namespace FCLBuch._System_RuntimeSerialization {
[Serializable]
public class Person2 : ISerializable, IDeserializationCallback {
// Klasse für benutzerdefinierte Serialisierung
public String Name;
public String Vorname;
public DateTime Geb;
public char Geschlecht;
public byte Kinderanzahl;
public string[] Taetigkeiten;
[NonSerialized] public DateTime Deserialisiert;
public Person2() {
// Konstruktor
FclOutput.PrintOut("Konstruktoraufruf!");
}
public Person2(SerializationInfo info, StreamingContext context) {
// Deserialisierung ausgewählter Eigenschaften
string[] namen = info.GetValue("kompletterName", typeof(System.String)).ToString().Split();
this.Vorname = namen[0];
this.Name = namen[1];
this.Geb = (DateTime)info.GetValue("Geb", typeof(System.DateTime));
}
region ISerializable Member
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) {
// Serialisierung ausgewählter Eigenschaften
FclOutput.PrintOut("Serialisierung des Typs: " + info.FullTypeName.ToString());
info.AddValue("kompletterName", Vorname + " " + Name);
info.AddValue("Geb", Geb);
}
endregion
region IDeserializationCallback Member
void IDeserializationCallback.OnDeserialization(object sender) {
// TODO: Implementierung von Person2.System.Runtime.Serialization.IDeserializationCallback.OnDeserialization hinzufügen
Deserialisiert = DateTime.Now;
FclOutput.PrintOut("Deserialisierung komplett!");
}
endregion
}
}
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;
using System.Xml.Serialization;
using FCL_Buch;
namespace FCLBuch._System_RuntimeSerialization {
public class SamplesKontrolliertesSerialisieren {
public void SerialKontrolle1() {
// Benutzerdefinierte Serialisierung
string datei = @"..\_daten\person.bin";
// Objekt füllen
Person2 p = new Person2();
p.Vorname = "Holger";
p.Name = "Schwichtenberg";
p.Geb = DateTime.Parse("08/01/1972");
p.Geschlecht = 'm';
p.Kinderanzahl = 0;
p.Taetigkeiten = new String[] {"Berater", "Entwickler", "Journalist", "Dozent"};
BinaryFormatter form = new BinaryFormatter();
// Serialisieren
FileStream stream = new FileStream(datei, FileMode.Create, FileAccess.Write, FileShare.None);
form.Serialize(stream, p);
stream.Close();
FclOutput.PrintOut("Objekt wurde gespeichert!");
p = null;
// Deserialisieren
stream = new FileStream(datei, FileMode.Open, FileAccess.Read, FileShare.Read);
p = (Person2)form.Deserialize(stream);
stream.Close();
FclOutput.PrintOut("Objekt wurde geladen!");
FclOutput.PrintOut(p.Vorname + " " + p.Name + " hat am " + p.Geb + " Geburtstag!");
}
}
}
Hinweise
Ausgaben werden in den Beispielen durch Hilfsroutinen wie out() und
PrintOut() erzeugt. Diese sind hier nicht angegeben, da deren Implementierung
von der jeweiligen Umgebung abhängt. Für Konsolenanwendungen können hier z.B.
Console.WriteLine() einsetzen.