Freigeben über


DataContractSerializer-Beispiel

Das DataContractSerializer-Beispiel veranschaulicht den DataContractSerializer, der allgemeine Serialisierungs- und Deserialisierungsdienste für die Datenvertragsklassen ausführt. Das Beispiel erstellt ein Record -Objekt, serialisiert es in einen Speicherstream und deserialisiert diesen wiederum in ein anderes Record-Objekt zurück, um die Verwendung von DataContractSerializer zu veranschaulichen. Das Beispiel serialisiert dann das Record-Objekt mithilfe eines Binärwriters, um zu veranschaulichen, wie der Writer die Serialisierung beeinflusst.

Tipp

Die Setupprozedur und die Erstellungsanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Der Datenvertrag für Record wird im folgenden Beispielcode gezeigt.

[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.

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.

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.

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. Sie können die XML-Codierung allerdings beeinflussen, indem Sie an einen anderen Writer übergeben. Im Beispiel wird ein Binärwriter durch den Aufruf von CreateBinaryWriter erstellt. Der Writer und das Datensatzobjekt werden dann an das Serialisierungsprogramm übergeben, wenn WriteObjectContent aufgerufen wird. Im Beispiel wird schließlich der Writer geleert und die Länge des Streams gemeldet.

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. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.

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 richten Sie das Beispiel ein, erstellen es und führen es aus

  1. Stellen Sie sicher, dass Sie Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.

  2. Zum Erstellen der C#- oder Visual Basic .NET-Version der Projektmappe folgen Sie den unter Erstellen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.

  3. Um das Beispiel auszuführen, starten Sie den Client, indem Sie client\bin\client.exe in die Eingabeaufforderung eingeben.

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