Back to slide -- Keyboard shortcut: 'u'        next -- Keyboard shortcut: 'n'          serialization/person-4/person.cs - The Person class - Serialization control with attributes.Lecture 10 - slide 33 : 40
Program 1

using System;
using System.Runtime.Serialization;

[Serializable]
public class Person{

  private string name;

  [NonSerialized()]
  private int age;    

  private Date dateOfBirth, dateOfDeath;

  public Person (string name, Date dateOfBirth){
    this.name = name;
    this.dateOfBirth = dateOfBirth;
    this.dateOfDeath = null;
    age = Date.Today.YearDiff(dateOfBirth);
  }

  [OnDeserialized()] 
  internal void FixPersonAfterDeserializing(
                           StreamingContext context){
    age = Date.Today.YearDiff(dateOfBirth);
  }

  public Date GetDateOfBirth(){
    return new Date(dateOfBirth);
  }

  public int Age{
    get {return Alive ? age : dateOfDeath.YearDiff(dateOfBirth);}
  }

  public bool Alive{
    get {return dateOfDeath == null;}
  }

  public void Died(Date d){
    dateOfDeath = d;
  }

  public void Update(){
    age = Date.Today.YearDiff(dateOfBirth);
  }

  public override string ToString(){
    return "Person: " + name + 
            "  *" + dateOfBirth + 
            (Alive ? "" : "  +" + dateOfDeath) +
            "  Age: " + age;
  }

}