XMLSerializer-BeispielXMLSerializer Sample

Dieses Beispiel veranschaulicht die Serialisierung und Deserialisierung von Typen, die mit dem XmlSerializer kompatibel sind.This sample demonstrates how to serialize and deserialize types that are compatible with the XmlSerializer. Der Standardformatierer für Windows Communication Foundation (WCF) ist die DataContractSerializer Klasse.The default Windows Communication Foundation (WCF) formatter is the DataContractSerializer class. Die XmlSerializer-Klasse kann auch zum Serialisieren und Deserialisieren von Typen verwendet werden, wenn die DataContractSerializer-Klasse nicht verwendet werden kann.The XmlSerializer class can be used to serialize and deserialize types when the DataContractSerializer class cannot be used. Dies ist oft der Fall, wenn die präzise Steuerung von XML wichtig ist – beispielsweise, wenn es sich bei einem Datenelement um ein XML-Attribut und nicht um ein XML-Element handeln muss.This is often the case when precise control over the XML is required - for example, if a piece of data must be an XML attribute and not an XML element. Darüber hinaus die XmlSerializer oft automatisch ausgewählt, wenn Clients für nicht-WCF-Dienste zu erstellen.Also, the XmlSerializer often gets automatically selected when creating clients for non-WCF services.

In diesem Beispiel ist der Client eine Konsolenanwendung (.exe), und der Dienst wird von IIS (Internet Information Services, Internetinformationsdienste) gehostet.In this sample, the client is a console application (.exe) and the service is hosted by Internet Information Services (IIS).

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

Das ServiceContractAttribute und das XmlSerializerFormatAttribute müssen wie im folgenden Beispielcode gezeigt auf die Schnittstelle angewendet werden.The ServiceContractAttribute and XmlSerializerFormatAttribute must be applied to the interface as shown in the following sample code.

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

Die öffentlichen Member der ComplexNumber-Klasse werden vom XmlSerializer als XML-Attribute serialisiert.The public members of ComplexNumber class are serialized by XmlSerializer as XML attributes. Der DataContractSerializer kann nicht zum Erstellen solcher XML-Instanzen verwendet werden.The DataContractSerializer cannot be used to create this kind of XML instance.

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

}  

Die Dienstimplementierung berechnet das entsprechende Ergebnis und gibt es zurück. Dabei werden Werte vom Typ ComplexNumber akzeptiert und zurückgegeben.The service implementation calculates and returns the appropriate result—accepting and returning values of the ComplexNumber type.

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

Die Clientimplementierung verwendet ebenfalls komplexe Zahlen.The client implementation also uses complex numbers. Der Dienstvertrag und die Datentypen werden in der Quelldatei "generatedclient.cs", die bei einer generiert wurde definiert die ServiceModel Metadata Utility Tool (Svcutil.exe) aus Dienstmetadaten.Both the service contract and the data types are defined in the generatedClient.cs source file, which was generated by the ServiceModel Metadata Utility Tool (Svcutil.exe) from service metadata. Svcutil.exe kann erkennen, wenn ein Vertrag nicht mit dem DataContractSerializer serialisierbar ist, und gibt in diesem Fall XmlSerializable-Typen aus.Svcutil.exe can detect when a contract is not serializable by the DataContractSerializer and reverts to emitting XmlSerializable types in this case. Wenn Sie die Verwendung des XmlSerializer erzwingen möchten, können Sie die Befehlsoption "/serializer:XmlSerializer" (XmlSerializer verwenden) an das Tool "Svcutil.exe" übergeben.If you want to force the use of the XmlSerializer, you can pass the /serializer:XmlSerializer (use XmlSerializer) command option to the Svcutil.exe tool.

// 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);  
    …  
}  

Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt.When you run the sample, the operation requests and responses are displayed in the client console window. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.Press ENTER in the client window to shut down the client.

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.  

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Um das Beispiel in einer einzelnen oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Client\Interop\XmlSerializer

Siehe auchSee Also