Partager via


XMLSerializer, exemple

Cet exemple montre comment sérialiser et désérialiser des types compatibles avec XmlSerializer. Le formateur Windows Communication Foundation (WCF) par défaut est la classe DataContractSerializer. La classe XmlSerializer permet de sérialiser et de désérialiser des types lorsque la classe DataContractSerializer ne peut pas être utilisée. C'est souvent le cas lorsqu'un contrôle précis sur le XML est requis (par exemple, si une donnée doit être un attribut XML et non pas un élément XML). Par ailleurs, XmlSerializer est souvent sélectionné automatiquement lors de la création de clients pour des services non-WCF.

Dans cet exemple, le client est une application console (.exe) et le service est hébergé par les services IIS (Internet Information Services).

ms751501.note(fr-fr,VS.90).gifRemarque :
La procédure d'installation ainsi que les instructions de génération relatives à cet exemple figurent à la fin de cette rubrique.

ServiceContractAttribute et XmlSerializerFormatAttribute doivent être appliqués à l'interface, tel qu'indiqué dans l'exemple de code suivant.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples"), XmlSerializerFormat]
public interface IXmlSerializerCalculator
{
    [OperationContract]
    ComplexNumber Add(ComplexNumber n1, ComplexNumber n2);
    [OperationContract]
    ComplexNumber Subtract(ComplexNumber n1, ComplexNumber n2);
    [OperationContract]
    ComplexNumber Multiply(ComplexNumber n1, ComplexNumber n2);
    [OperationContract]
    ComplexNumber Divide(ComplexNumber n1, ComplexNumber n2);
}

Les membres publics de la classe ComplexNumber sont sérialisés par XmlSerializer en tant qu'attributs XML. DataContractSerializer ne permet pas de créer ce type d'instance XML.

public class ComplexNumber
{
    private double real;
    private double imaginary;

    [XmlAttribute]
    public double Real
    {
        get { return real; }
        set { real = value; }
    }

    [XmlAttribute]
    public double Imaginary
    {
        get { return imaginary; }
        set { imaginary = value; }
    }

    public ComplexNumber(double real, double imaginary)
    {
        this.Real = real;
        this.Imaginary = imaginary;
    }
    public ComplexNumber()
    {
        this.Real = 0;
        this.Imaginary = 0;
    }

}

L'implémentation de service calcule et retourne le résultat approprié, en acceptant et en retournant des valeurs du type ComplexNumber.

public class XmlSerializerCalculatorService : IXmlSerializerCalculator
{
    public ComplexNumber Add(ComplexNumber n1, ComplexNumber n2)
    {
        return new ComplexNumber(n1.Real + n2.Real, n1.Imaginary +
                                                      n2.Imaginary);
    }
    …
}

L'implémentation cliente utilise également des nombres complexes. Le contrat de service et les types de données sont définis dans le fichier source generatedClient.cs, lequel a été généré par Service Metadata Utility Tool (Svcutil.exe) à partir des métadonnées de service. Svcutil.exe peut détecter lorsqu'un contrat n'est pas sérialisable par DataContractSerializer et, dans ce cas, l'émission des types XmlSerializable est rétablie. Pour forcer l'utilisation de XmlSerializer, passez l'option de commande /serializer:XmlSerializer (utilisez XmlSerializer) à l'outil Svcutil.exe.

// Create a client.
XmlSerializerCalculatorClient client = new
                         XmlSerializerCalculatorClient();

// Call the Add service operation.
ComplexNumber value1 = new ComplexNumber();
value1.Real = 1;
value1.Imaginary = 2;
ComplexNumber value2 = new ComplexNumber();
value2.Real = 3;
value2.Imaginary = 4;
ComplexNumber result = client.Add(value1, value2);
Console.WriteLine("Add({0} + {1}i, {2} + {3}i) = {4} + {5}i",
    value1.Real, value1.Imaginary, value2.Real, value2.Imaginary,     result.Real, result.Imaginary);
    …
}

Lorsque vous exécutez l'exemple, les demandes et réponses d'opération s'affichent dans la fenêtre de console cliente. Appuyez sur ENTER dans la fenêtre du client pour l'arrêter.

    Add(1 + 2i, 3 + 4i) = 4 + 6i
    Subtract(1 + 2i, 3 + 4i) = -2 + -2i
    Multiply(2 + 3i, 4 + 7i) = -13 + 26i
    Divide(3 + 7i, 5 + -2i) = 0.0344827586206897 + 1.41379310344828i

    Press <ENTER> to terminate client.

Pour configurer, générer et exécuter l'exemple

  1. Assurez-vous d'avoir effectué la procédure indiquée dans la section Procédure d'installation unique pour les exemples Windows Communication Foundation.

  2. Pour générer l'édition C# ou Visual Basic .NET de la solution, suivez les instructions indiquées dans Génération des exemples Windows Communication Foundation.

  3. Pour exécuter l'exemple dans une configuration à un ou plusieurs ordinateurs, suivez les instructions indiquées dans Exécution des exemples Windows Communication Foundation.

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.