Exemplo de DataContractSerializer

O exemplo DataContractSerializer demonstra o DataContractSerializer, que executa serviços gerais de serialização e desserialização para as classes de contrato de dados. O exemplo cria um Record objeto, serializa-o para um fluxo de memória e desserializa o fluxo de memória de volta para outro Record objeto para demonstrar o uso do DataContractSerializer. O exemplo serializa o objeto usando um gravador binário para demonstrar como o gravador afeta a Record serialização.

Nota

O procedimento de configuração e as instruções de compilação para este exemplo estão localizados no final deste tópico.

O contrato de dados para é mostrado no código de exemplo a Record seguir.

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

O código de exemplo cria um Record objeto chamado record1 e, em seguida, exibe o objeto.

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

O exemplo, em seguida, usa o DataContractSerializer para serializar record1 em um fluxo de memória.

MemoryStream stream1 = new MemoryStream();

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

Em seguida, o exemplo usa o DataContractSerializer para desserializar o fluxo de memória de volta em um novo Record objeto e o exibe.

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

Por padrão, o codifica DataContractSerializer objetos em um fluxo usando uma representação textual de XML. No entanto, você pode influenciar a codificação do XML passando um gravador diferente. O exemplo cria um gravador binário chamando CreateBinaryWriter. Em seguida, ele passa o gravador e o objeto de registro para o serializador quando ele chama WriteObjectContent. Finalmente, a amostra libera o gravador e informa sobre o comprimento dos fluxos.

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

Quando você executa o exemplo, o registro original e o registro desserializado são exibidos, seguidos pela comparação entre o comprimento da codificação de texto e a codificação binária. Pressione ENTER na janela do cliente para desligar o cliente.

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.

Para configurar, compilar e executar o exemplo

  1. Certifique-se de ter executado o procedimento de instalação única para os exemplos do Windows Communication Foundation.

  2. Para criar a edição C# ou Visual Basic .NET da solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.

  3. Para executar o exemplo, inicie o cliente a partir do prompt de comando digitando client\bin\client.exe.