Comment travailler avec la sérialisation dans .Net

Lorsque vous travaillez avec des applications, vous aurez souvent besoin de stocker des données sur un support de stockage persistant ou non persistant afin que les mêmes données puissent être récupérées ultérieurement. La sérialisation, une fonctionnalité fournie par le CLR, peut vous aider à atteindre cet objectif.

La sérialisation peut être définie comme le processus de conversion d'un objet en un flux d'octets, en conservant l'état de l'objet dans la mémoire, base de données d'un fichier. L'inverse de la sérialisation est la désérialisation, qui reconstruit l'objet à partir du flux d'octets. En d'autres termes, la désérialisation est le processus de conversion d'un objet sérialisé dans son état d'origine.

La sérialisation est nécessaire pour faire passer un objet sur le fil - elle facilite la transmission d'un objet sur un réseau. Par conséquent, vous pouvez tirer parti de la sérialisation pour passer un objet d'un domaine d'application à un autre. Vous pouvez également profiter de la sérialisation pour créer un clone d'un objet.

Cependant, la sérialisation est également coûteuse en raison de la surcharge de ressources impliquée dans la sérialisation et la désérialisation des objets. Pour travailler avec la sérialisation dans .Net, vous devez tirer parti de l'espace de noms System.Runtime.Serialization, c'est-à-dire que vous devez inclure cet espace de noms dans votre programme.

Vous pouvez rendre une classe sérialisable à l'aide de l'attribut [Serializable]. Voici un exemple qui montre comment appliquer cet attribut à une classe.

[Serializable]

public class Product

{

   public int productCode;

   public string productName;

}

Maintenant, si vous souhaitez empêcher un ou plusieurs membres d'une classe d'être sérialisés, vous pouvez utiliser l'attribut NonSerialized comme indiqué dans l'extrait de code ci-dessous.

[Serializable]

    public class Product

    {

        public int productCode;

        public string productName;

        [NonSerialized()]

        public double productPrice;

    }

Le framework .Net prend en charge les types de sérialisation suivants.

  1. Binaire
  2. SAVON
  3. XML
  4. Douane

Sérialisation binaire

La sérialisation binaire est la plus rapide de toutes les techniques de sérialisation - elle peut être utilisée pour sérialiser un objet dans un flux binaire. Il s'agit d'un type de sérialisation qui peut être utilisé pour sérialiser un objet dans un flux de sortie tout en préservant l'identité de l'objet - les informations de type ne sont pas perdues dans le processus de sérialisation. Notez que lors de l'utilisation de la sérialisation binaire, l'objet est enregistré dans son intégralité. Pour travailler avec la sérialisation binaire, vous devez inclure l'espace de noms System.Runtime.Serialization.Formatters.Binary.

Sérialisation SOAP

La sérialisation SOAP (Simple Object Access Protocol) est un bon choix lorsque vous souhaitez transférer des objets d'une application à une autre lorsque ces applications utilisent des architectures hétérogènes. En substance, le principal avantage de l'utilisation de la sérialisation SOAP est la portabilité. La sérialisation SOAP peut être utilisée pour sérialiser un objet au format SOAP. Pour travailler avec la sérialisation SOAP, vous devez inclure l'espace de noms System.Runtime.Serialization.Formatters.Soap dans votre programme. Notez que comme la sérialisation XML, les objets sérialisés à l'aide de la sérialisation SOAP sont conservés en tant que XML.

Sérialisation XML

La sérialisation XML est un type de sérialisation utilisé pour sérialiser les membres publics d'une instance d'une classe dans un flux XML. Notez que la sérialisation XML est lente par rapport à la sérialisation binaire - en fait, elle est beaucoup plus lente. Le principal avantage de la sérialisation XML est qu'elle fournit une prise en charge multiplateforme et parce qu'elle est basée sur du texte, elle est lisible et peut également être modifiée. Vous pouvez tirer parti de XmlAttribute et le définir sur une propriété pour permettre à la propriété d'être sérialisée à l'aide de la sérialisation XML. L'extrait de code suivant illustre comment vous pouvez utiliser XmlAttribute sur une propriété.

[XmlAttribute("productName")]

public string ProductName

{

  get

  {

    return productName;

  }

  set

  {

    productName = value;

  }

}

Pour sérialiser et désérialiser un objet à l'aide de la sérialisation XML, vous pouvez utiliser XmlSerializer. L'extrait de code suivant montre comment vous pouvez sérialiser un objet à l'aide de la sérialisation XML - notez comment XmlSerializer est utilisé.

XmlSerializer xmlSerializer = new XmlSerializer(typeof(Product));

using (TextWriter textWriter = new StreamWriter(@"D:\Product.xml"))

 {

    xmlSerializer.Serialize(textWriter, productObject);

 }

Sérialisation personnalisée

Vous pouvez tirer parti de la sérialisation personnalisée pour contrôler la manière dont une instance d'un type peut être sérialisée et désérialisée. Vous pouvez implémenter la sérialisation personnalisée en implémentant l'interface ISerializable. L'interface ISerializable déclare la méthode GetObjectData (). L'extrait de code suivant illustre comment vous pouvez implémenter une technique de sérialisation personnalisée en implémentant l'interface ISerializable.

[Serializable]

public class Product : ISerializable

{

    public void GetObjectData(SerializationInfo info, StreamingContext context)

    {

        //Usual code

    }

}