Udostępnij za pośrednictwem


Przykład elementu 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 Record obiekt, serializuje go do strumienia pamięci i deserializuje strumień pamięci z powrotem do innego Record obiektu w celu zademonstrowania użycia DataContractSerializerobiektu . Następnie próbka serializuje Record obiekt przy użyciu modułu zapisywania binarnego, aby zademonstrować, jak składnik zapisywania wpływa na serializacji.

Uwaga

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

Kontrakt danych dla Record elementu jest wyświetlany 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 do DataContractSerializer deserializacji strumienia pamięci z powrotem do nowego Record obiektu 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 obiekty są kodowane do strumienia przy użyciu tekstowej reprezentacji XML. Można jednak wpływać na kodowanie kodu XML, przekazując inny składnik zapisywania. Przykład tworzy moduł zapisywania binarnego przez wywołanie metody CreateBinaryWriter. Następnie przekazuje składnik zapisywania i obiekt rekordu do serializatora, gdy wywołuje WriteObjectContentmetodę . Na koniec przykład opróżnia składnik zapisywania 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 klawisz 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ład

  1. Upewnij się, że wykonano procedurę instalacji jednorazowej 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 temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).

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