Hoofdstuk 5 - Les 3

Met customserialisatie kan ervoor worden gezorgd dat het serialiseren en deserialiseren tussen verschillende applicatie versies goed verloopt. Dit houdt in dat als er bijvoorbeeld een veld is bijgekomen in een class die wordt geserialiseerd, de oude versie hier niet op stuk loopt.

Bij custom serialisatie moet de interface ISerilizable worden geimplementeerd en moet het attribuut [Serializable] worden toegevoegd aan de class. Bij het implementeren van deze interface moet de methode GetObjectData worden geimplementeerd, maar ook een constructor die wordt aangeroepen bij het deserialiseren.

Tijdens het serialiseren wordt de methode GetObjectData aangeroepen en moet het SerializationInfo object handmatig worden gevuld. Dit kan door middel van de AddValue methode met name/value paren. Tijdens het deserialiseren kunnen de waarden weer opgehaald worden d.m.v. de meegegeven name.

.NET ondersteunt binary serialisatie events als de BinaryFormatter class wordt gebruikt. De SoapFormatter kent deze events niet.
Er zijn vier events die worden gebruikt bij het serialiseren/deserialiseren:
  1. Serializing: gebeurt vlak voordat de serialisatie plaatsvind. Voeg het [OnSerializing] attribuut toe aan de methode die uitgevoerd moet worden als dit event plaatsvind.
  2. Serialized: gebeurt als de serialisatie is voltooid. Voeg het [Serialized] attribuut toe een de methode die moet worden uitgevoerd als dit event plaatsvind.
  3. Deserializing: gebeurt vlak voordat de deserialisatie plaatsvind. Bijbehorend attribuut: [OnDeserialize].
  4. Deserialized: gebeurt als deserialisatie is voltooid en nadat IDeserializationCallback.OnDeserialization is aangeroepen. Bijbehorend attribuut is [OnDeserialized]

Methoden die (de)serialisatie attributen bevatten (Serialized, OnSerializing, etc) moeten aan de volgende criteria voldoen:

  • Accepteer een StreamingContext object als een parameter
  • Return void
  • Is uitegrust met het attribuut die correspondeert met het event waarop gereageerd moet worden.

Op basis van de StreamingContext kan bepaald worden wat de bestemming is van het geserialiseerde object. Deze struct wordt meegestuurd aan GetObjectData en aan de speciale constructor.

Een custom formatter kan gemaakt worden door de IFormatter interface te implementeren.

Reacties

Populaire posts van deze blog

[SQL Server] varchar vs nvarchar

MS Sql 70-461: Chapter 5

[C#] Class serialiseren en deserialiseren