Udostępnij za pośrednictwem


Przykład DataContractSerializer

Przykład DataContractSerializer przedstawia metodę DataContractSerializer, która wykonuje ogólne usługi serializacji i deserializacji dla klas kontraktów danych. Przykład tworzy obiekt Record, serializuje go do strumienia pamięci i deserializuje strumień pamięci do innego obiektu Record, aby zademonstrować użycie DataContractSerializer. Następnie przykład serializuje Record obiekt przy użyciu binarnego pisarza, aby zademonstrować, jak pisarz wpływa na serializację.

Uwaga / Notatka

Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.

Kontrakt danych dla Record jest pokazany w poniższym przykładowym kodzie.

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

Przykładowy kod tworzy Record obiekt o nazwie record1 , a następnie wyświetla obiekt.

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

Następnie przykład używa elementu DataContractSerializer do serializacji record1 do strumienia pamięci.

MemoryStream stream1 = new MemoryStream();

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

Następnie przykład używa elementu DataContractSerializer do deserializacji strumienia pamięci z powrotem do nowego obiektu Record i wyświetla go.

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());

Domyślnie DataContractSerializer koduje obiekty do strumienia przy użyciu tekstowej reprezentacji XML. Można jednak wpływać na kodowanie XML, przekazując inny obiekt zapisu. Przykład tworzy moduł zapisywania binarnego przez wywołanie metody CreateBinaryWriter. Następnie przekazuje moduł zapisu i obiekt rekordu do serializatora, gdy wywołuje WriteObjectContent metodę. Na koniec próbka opróżnia zapisujący i raportuje długość strumieni.

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

Po uruchomieniu przykładu zostanie wyświetlony oryginalny rekord i zdeserializowany rekord, a następnie porównanie długości kodowania tekstu i kodowania binarnego. Naciśnij ENTER w oknie klienta, aby zamknąć klienta.

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.

Aby skonfigurować, skompilować i uruchomić przykładowy program

  1. Upewnij się, że wykonano procedurę instalacji One-Time dla przykładów programu Windows Communication Foundation.

  2. Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w Kompilowanie przykładów Windows Communication Foundation.

  3. Aby uruchomić przykład, uruchom klienta z wiersza polecenia, wpisując klienta\bin\client.exe.