Freigeben über


DataContractSerializer-Beispiel

Im DataContractSerializer-Beispiel wird veranschaulicht, das DataContractSerializer allgemeine Serialisierungs- und Deserialisierungsdienste für die Datenvertragsklassen ausführt. Im Beispiel wird ein Record-Objekt erstellt, in einen Speicherstream serialisiert und anschließend wieder in ein anderes Record-Objekt zurückdeserialisiert, 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.

Hinweis

Die Einrichtungsverfahren und Build-Anweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

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

[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 $"Record: {n1} {operation} {n2} = {result}";
    }
}

Der Beispielcode erstellt ein Record Objekt mit dem Namen record1 und zeigt das Objekt an.

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

Im Beispiel wird dann DataContractSerializer verwendet, um record1 in einen Speicherdatenstrom 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);

Anschließend verwendet der Beispielcode den DataContractSerializer, um den Speicherstrom wieder in ein neues Record-Objekt zu deserialisieren und anzuzeigen.

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 die DataContractSerializer Objekte in einem Datenstrom mithilfe einer textbezogenen Darstellung von XML. Sie können die XML-Codierung allerdings beeinflussen, indem Sie an einen anderen Writer übergeben. Im Beispiel wird ein binärer Writer erstellt, indem CreateBinaryWriter aufgerufen wird. 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);

Wenn Sie das Beispiel ausführen, werden der ursprüngliche Datensatz und der deserialisierte Datensatz angezeigt, gefolgt vom Vergleich zwischen der Länge der Textcodierung und der binären Codierung. 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 können Sie das Beispiel einrichten, erstellen und ausführen

  1. Stellen Sie sicher, dass Sie das One-Time Setup-Verfahren für die Windows Communication Foundation-Beispieleausgeführt haben.

  2. Um die C#- oder Visual Basic .NET-Edition der Lösung zu erstellen, befolgen Sie die Anweisungen in Building the Windows Communication Foundation Samples.

  3. Um das Beispiel auszuführen, starten Sie den Client über die Eingabeaufforderung, indem Sie client\bin\client.exeeingeben.