Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O exemplo DataContractSerializer demonstra o DataContractSerializer, que executa serviços gerais de serialização e desserialização para as classes de contratos de dados. O exemplo cria um objeto Record e o serializa em um fluxo de memória, para então desserializar esse fluxo de memória em outro objeto Record, demonstrando o uso do DataContractSerializer. O exemplo então serializa o objeto Record usando um gravador binário para demonstrar como o gravador afeta a serialização.
Observação
O procedimento de instalação e as instruções de build para este exemplo estão localizados no final deste tópico.
O contrato de dados de Record é mostrado no exemplo de código a 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 nomeado record1 e exibe o objeto.
Record record1 = new Record(1, 2, "+", 3);
Console.WriteLine("Original record: {0}", record1.ToString());
Em seguida, o exemplo 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 objeto Record 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 DataContractSerializer codifica 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. Por fim, o exemplo libera o gravador e relata 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, seguido 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
Verifique se você executou o Procedimento de instalação avulsa dos exemplos do Windows Communication Foundation.
Para compilar a edição .NET do C# ou do Visual Basic da solução, siga as instruções contidas em Como Compilar as Amostras do Windows Communication Foundation.
Para executar o exemplo, inicie o cliente no prompt de comando digitando o cliente\bin\client.exe.