Page d'Accueil

Détails sur la Sérialisation en SOAP

 

Sérialisation Partielle

Dans les exemples que nous avons utilisés jusqu'ici, nous sauvions l'objet entier. Vous pouvez vous permettre de sauver seulement quelques parties de la classe. En créant une classe, vous pouvez indiquer quels champs seraient sérialisés et qui ne seraient pas. Pour indiquer qu'un membre ne peut pas être sauvgardé, vous pouvez la marquer avec l'attribut  [NonSerialized]. Voici un exemple:

[Serializable]
public class Car
{
    public string Make;
    public string Model;

    // Because the value of a car can change,
    // there is no reason to save it
    [NonSerialized]
    public decimal Value;
    public uint Year;
    public byte Color;
}

Après avoir créé la classe, vous pouvez déclarer sa variable et la sérialiser, en utilisant l'approche binaire ou SOAP. Voici un exemple :

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
public class Car
{
    public string Make;
    public string Model;

    // Because the value of a car can change,
    // there is no reason to save it
    [NonSerialized]
    public decimal Value;
    public uint Year;
    public byte Color;
}

class Program
{
    static int Main(string[] args)
    {
        Car vehicle = new Car();

        vehicle.Make = "Lexus";
        vehicle.Model = "LS";
        vehicle.Year = 2007;
        vehicle.Color = 4;
        vehicle.Value = 28640M;

        FileStream stmCar = new FileStream("Car1.car",
                                           FileMode.Create);
        BinaryFormatter bfmCar = new BinaryFormatter();

        bfmCar.Serialize(stmCar, vehicle);


        return 0;
    }
}

Vous pouvez alors rechercher l'objet et ses valeurs, en utilisant une des techniques que nous avons apprises plus tôt. Voici un exemple :

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
public class Car
{
    public string Make;
    public string Model;

    // Because the value of a car can change,
    // there is no reason to save it
    [NonSerialized]
    public decimal Value;
    public uint Year;
    public byte Color;
}

class Program
{
    static int Main(string[] args)
    {
        
        FileStream stmCar = new FileStream("Car1.car",
                                             FileMode.Open);
        BinaryFormatter bfmCar = new BinaryFormatter();
        Car vehicle = (Car)bfmCar.Deserialize(stmCar);

        Console.WriteLine("Car Information");
        Console.WriteLine("Make: {0}", vehicle.Make);
        Console.WriteLine("Model: {0}", vehicle.Model);
        Console.WriteLine("Year: {0}", vehicle.Year);
        Console.Write("Color: ");
        switch (vehicle.Color)
        {
            case 1:
                Console.WriteLine("Black");
                break;
            case 2:
                Console.WriteLine("Gray");
                break;
            case 3:
                Console.WriteLine("White");
                break;
            case 4:
                Console.WriteLine("Red");
                break;
            case 5:
                Console.WriteLine("Blue");
                break;
        }
        Console.WriteLine("Value:  {0}\n", vehicle.Value);

        return 0;
    }
}

Ceci produirait :

Car Information
Make: Lexus
Model: LS
Year: 2007
Color: Red
Value:  0

Press any key to continue . . .

Notez que la valeur de valeur champ n'a pas été sauvegardée : elle contient la valeur par défaut de son type de données. Ceci indiquant cela, vous pouvez assigner la valeur champ [NonSerialized] et sauvegarder l'objet. La valeur de ce champ ne serait pas sauvegarder mais le compilateur ne rejetterait pas une exception.

Application personnalisée d'une Classe Sérialisée

Pour soutenir la sérialisation, .NET Framework fournit l'interface ISerializable. Vous pouvez créer une classe qui met en application cette interface pour personnaliser le procédé de sérialisation. Même si vous projetez utiliser cette interface, la classe que vous créez doit être identifiée par l'attribut [ Serializable].

Classes sérialisées intégrées de .NET

.NET Framework est rempli de beaucoup de classes prêtes pour la sérialisation. Pour savoir qu'une classe est prête pour la sérialisation, en regardant sa documentation dans le site Web de MSDN ou dans la documentation d'aide, vérifier qu'elle est identifiée par [SerializableAttribute]. Voici un exemple d'une telle classe :

The Serializable attribute of a built-in class

Certaines de ces classes fournissent les propriétés et les méthodes pour créer un objet et pour le sauvegarder directement. Pour quelques autres classes, vous devez d'abord créer une classe, la marquer avec l'attribut [ Serializable], établir son objet, et puis le passez dans la classe .NET.

  

Page d'Accueil Copyright © 2007, Yevol