« 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)]]
|