Sharp

Default values bei der Serialisierung

Man nehme an, dass man folgendes Objekt besitzt:

[Serializable]
class Person
{
    string name;
    string prename;
}

Dieses Objekt wurde lange Zeit erfolgreich in einem Softwareprodukt genutzt und als Speichermedium wird die eingebaute .Net-Serialisierung genutzt (BinaryFormatter). Das Objekt wird mit den obigen zwei Eigenschaften gespeichert.

Auf Grund neuer Anforderungen erweitert man nun um eine Eigenschaft ‘age’, die den Standardwert ‘-1’ enthalten soll.

[Serializable]
class Person
{
    string name;
    string prename;
    int age = –1;
}

Liest man nun eine schon vorhandene Serialisierung ein, so ist dieser Wert der serialisierten Objekte nicht auf –1 gesetzt worden, sondern auf 0. Der Grund liegt daran, dass die eingebauten Serialisierungsroutinen nicht den Standard-Konstruktur aufrufen.

Um nun einen Standard-Wert schreiben zu können, kann das OnDeserializing-Attribut verwendet werden. Die Klasse sieht nach der Verwendung folgendermaßen aus:

[Serializable]
class Person
{
    string name;
    string prename;
    int age = –1;

    [OnDeserializing]
    internal void OnDeserializing(StreamingContext s)
    {
        this.age = –1;
    }
}

Diese Methode wird nun VOR der Deserialisierung aufgerufen und führt zu einem Setzen des Standard-Wertes.

Tags: ,

Hinterlasse eine Antwort