Delen via


XMLSerializer-voorbeeld

Het XmlSerializer-voorbeeld laat zien hoe u typen kunt serialiseren en deserialiseren die compatibel zijn met de XmlSerializer. De standaardindeling van Windows Communication Foundation (WCF) is de DataContractSerializer klasse. De XmlSerializer klasse kan worden gebruikt om typen te serialiseren en deserialiseren wanneer de DataContractSerializer klasse niet kan worden gebruikt. Dit is vaak het geval wanneer nauwkeurige controle over de XML vereist is, bijvoorbeeld als een stukje gegevens een XML-kenmerk moet zijn en geen XML-element. Bovendien wordt het vaak automatisch geselecteerd bij het XmlSerializer maken van clients voor niet-WCF-services.

In dit voorbeeld is de client een consoletoepassing (.exe) en wordt de service gehost door Internet Information Services (IIS).

Notitie

De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.

De ServiceContractAttribute en XmlSerializerFormatAttribute moeten worden toegepast op de interface, zoals wordt weergegeven in de volgende voorbeeldcode.

[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);
}

De openbare leden van ComplexNumber de klasse worden geserialiseerd XmlSerializer als XML-kenmerken. Het DataContractSerializer kan niet worden gebruikt om dit type XML-exemplaar te maken.

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;
    }

}

De service-implementatie berekent en retourneert het juiste resultaat: het accepteren en retourneren van waarden van het ComplexNumber type.

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

De client-implementatie maakt ook gebruik van complexe getallen. Zowel het servicecontract als de gegevenstypen worden gedefinieerd in het generatedClient.cs bronbestand, dat is gegenereerd door het Hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe) op basis van servicemetagegevens. Svcutil.exe kan detecteren wanneer een contract niet kan worden geserialiseerd door de DataContractSerializer en wordt teruggezet naar het verzenden van XmlSerializable typen in dit geval. Als u het gebruik van de XmlSerializeropdracht wilt afdwingen, kunt u de opdrachtoptie /serializer:XmlSerializer (gebruik XmlSerializer) doorgeven aan het hulpprogramma 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);
    …
}

Wanneer u het voorbeeld uitvoert, worden de bewerkingsaanvragen en -antwoorden weergegeven in het clientconsolevenster. Druk op Enter in het clientvenster om de client af te sluiten.

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.

Het voorbeeld instellen, compileren en uitvoeren

  1. Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.

  2. Als u de C# of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden.

  3. Als u het voorbeeld wilt uitvoeren in een configuratie met één of meerdere computers, volgt u de instructies in Het uitvoeren van de Windows Communication Foundation-voorbeelden.