Binäre Serialisierung
Die Klasse Person soll auf der Festplatte gespeichert und anschließend wieder eingelesen werden. Mit der Markierung [Serializable()]
wird die komplette Klasse für die Serialisierung zugänglich gemacht. Da das Alter im Beispiel jedes Mal berechnet wird, muss die Variable age
nicht serialisiert werden.
[Serializable()]
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
[NonSerialized()]
private int? age;
public int? Age
{
get
{
if (age != null)
{
return age;
}
age = DateTime.Today.Year - DateOfBirth.Year;
if (DateOfBirth > DateTime.Today.AddYears(-1))
age--;
return age;
}
}
public void Print()
{
Console.WriteLine($"First Name: {FirstName}");
Console.WriteLine($"Last Name: {LastName}");
Console.WriteLine($"Date of Birth: {DateOfBirth.ToShortDateString()}");
Console.WriteLine($"Age: {Age}");
}
Serialisierung
Person person = new Person { FirstName = "John", LastName = "Doe", DateOfBirth = new DateTime(1988, 01, 22) };
BinaryFormatter formatter = new BinaryFormatter();
FileStream stream = new FileStream(@"c:\tmp\person.bin", FileMode.Create);
formatter.Serialize(stream, person);
stream.Close();
Deserialisierung
Person person;
BinaryFormatter formatter = new BinaryFormatter();
FileStream stream = new FileStream(@"c:\tmp\person.bin", FileMode.Open);
person = (Person)formatter.Deserialize(stream);
stream.Close();
person.Print();