« Programmation C sharp/La sérialisation » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Ligne 113 :
== Sérialisation personnalisée ==
Il est possible de personnaliser la manière de sérialiser un objet en implémentant l'interface <tt>System.Runtime.Serialization.ISerializable</tt>.
 
Cette interface n'a qu'une méthode, invoquée lors de la sérialisation :
 
<source lang="csharp">
void GetObjectData (
SerializationInfo info,
StreamingContext context )
</source>
 
Mais la classe doit également comporter le constructeur suivant, invoqué lors de la désérialisation :
protected ''NomDeClasse''(SerializationInfo info, StreamingContext context)
 
L'objet de type SerializationInfo permet la sérialisation et la désérialisation de l'objet. Chaque valeur sauvegardée est associé à un nom unique. Cet objet possède les méthodes suivantes :
public void AddValue(string name, ''T'' value) // tout type de valeur
public void GetValue(string name, Type type)
public void Get''Type''(string name)
 
L'implémentation de la méthode <tt>GetObjectData</tt> fait appel à la méthode <tt>AddValue</tt> de l'objet <tt>info</tt> pour ajouter une valeur à sauvegarder. Le constructeur utilise la méthode <tt>GetValue</tt> ou les méthode <tt>Get''Type''</tt> pour retrouver la valeur sauvegardée.
 
Exemple :
<source lang="csharp">
[Serializable]
public class Personne : ISerializable
{
private string nom;
private int age;
 
public Personne() { }
 
protected Personne(SerializationInfo info, StreamingContext context)
{
if (info == null)
throw new System.ArgumentNullException("info");
 
nom = (string)info.GetValue("Nom", typeof(string));
age = (int)info.GetValue("Age", typeof(int));
}
 
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null)
throw new System.ArgumentNullException("info");
 
info.AddValue("Nom", nom);
info.AddValue("Age", age);
}
}
</source>
 
[[Catégorie:Programmation C sharp (livre)]]