DataContractSerializer-BeispielDataContractSerializer Sample

Das DataContractSerializer-Beispiel veranschaulicht den DataContractSerializer, der allgemeine Serialisierungs- und Deserialisierungsdienste für die Datenvertragsklassen ausführt.The DataContractSerializer sample demonstrates the DataContractSerializer, which performs general serialization and deserialization services for the data contract classes. Das Beispiel erstellt eine Record Objekt, serialisiert es in einen Speicherstream und deserialisiert diesen in eine andere Record -Objekt zum Veranschaulichen der Verwendung von der DataContractSerializer.The sample creates a Record object, serializes it to a memory stream and deserializes the memory stream back to another Record object to demonstrate the use of the DataContractSerializer. Das Beispiel serialisiert dann das Record-Objekt mithilfe eines Binärwriters, um zu veranschaulichen, wie der Writer die Serialisierung beeinflusst.The sample then serializes the Record object using a binary writer to demonstrate how the writer affects serialization.

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.

Der Datenvertrag für Record wird im folgenden Beispielcode gezeigt.The data contract for Record is shown in the following sample code.

[DataContract(Namespace="http://Microsoft.ServiceModel.Samples")]  
internal class Record  
{  
    private double n1;  
    private double n2;  
    private string operation;  
    private double result;  

    internal Record(double n1, double n2, string operation, double result)  
    {  
        this.n1 = n1;  
        this.n2 = n2;  
        this.operation = operation;  
        this.result = result;  
    }  

    [DataMember]  
    internal double OperandNumberOne  
    {  
        get { return n1; }  
        set { n1 = value; }  
    }  

    [DataMember]  
    internal double OperandNumberTwo  
    {  
        get { return n2; }  
        set { n2 = value; }  
    }  

    [DataMember]  
    internal string Operation  
    {  
        get { return operation; }  
        set { operation = value; }  
    }  

    [DataMember]  
    internal double Result  
    {  
        get { return result; }  
        set { result = value; }  
    }  

    public override string ToString()  
    {  
        return string.Format("Record: {0} {1} {2} = {3}", n1,  
            operation, n2, result);  
    }  
}  

Der Beispielcode erstellt ein Record-Objekt namens record1 und zeigt dann das Objekt an.The sample code creates a Record object named record1 then displays the object.

Record record1 = new Record(1, 2, "+", 3);  
Console.WriteLine("Original record: {0}", record1.ToString());  

Das Beispiel nutzt dann DataContractSerializer, um record1 in einen Speicherstream zu serialisieren.The sample then uses the DataContractSerializer to serialize record1 into a memory stream.

MemoryStream stream1 = new MemoryStream();  

//Serialize the Record object to a memory stream using DataContractSerializer.  
DataContractSerializer serializer = new DataContractSerializer(typeof(Record));  
serializer.WriteObject(stream1, record1);  

Danach nutzt das Beispiel DataContractSerializer, um den Speicherstream in ein neues Record-Objekt zu deserialisieren, und zeigt es an.Next, the sample uses the DataContractSerializer to deserialize the memory stream back into a new Record object and displays it.

stream1.Position = 0;  

//Deserialize the Record object back into a new record object.  
Record record2 = (Record)serializer.ReadObject(stream1);  

Console.WriteLine("Deserialized record: {0}", record2.ToString());  

Standardmäßig codiert DataContractSerializer Objekte mithilfe einer Textdarstellung von XML in einen Stream.By default, the DataContractSerializer encodes objects into a stream using a textual representation of XML. Sie können die XML-Codierung allerdings beeinflussen, indem Sie an einen anderen Writer übergeben.However, you can influence the encoding of the XML by passing in a different writer. Im Beispiel wird ein Binärwriter durch den Aufruf von CreateBinaryWriter erstellt.The sample creates a binary writer by calling CreateBinaryWriter. Der Writer und das Datensatzobjekt werden dann an das Serialisierungsprogramm übergeben, wenn WriteObjectContent aufgerufen wird.It then passes the writer and the record object to the serializer when it calls WriteObjectContent. Im Beispiel wird schließlich der Writer geleert und die Länge des Streams gemeldet.Finally, the sample flushes the writer and reports on the length of the streams.

MemoryStream stream2 = new MemoryStream();  

XmlDictionaryWriter binaryDictionaryWriter = XmlDictionaryWriter.CreateBinaryWriter(stream2);  
serializer.WriteObject(binaryDictionaryWriter, record1);  
binaryDictionaryWriter.Flush();  

//report the length of the streams  
Console.WriteLine("Text Stream is {0} bytes long", stream1.Length);  
Console.WriteLine("Binary Stream is {0} bytes long", stream2.Length);  

Bei der Durchführung des Beispiels werden der Originaldatensatz und der deserialisierte Datensatz gefolgt vom Vergleich zwischen der Länge der Textcodierung und der binären Codierung angezeigt.When you run the sample, the original record and the deserialized record are displayed, followed by the comparison between the length of the text encoding and the binary encoding. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.Press ENTER in the client window to shut down the client.

Original record: Record: 1 + 2 = 3  
Deserialized record: Record: 1 + 2 = 3  
Text Stream is 233 bytes long  
Binary Stream is 156 bytes long  

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 auszuführen, starten Sie den Client, indem Sie client\bin\client.exe in die Eingabeaufforderung eingeben.To run the sample, start the client from the command prompt by typing client\bin\client.exe.

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\Contract\Data\DataContractSerializer

Siehe auchSee Also