Compartir a través de


Ejemplo de DataContractSerializer

El ejemplo de DataContractSerializer muestra el DataContractSerializer que realiza la serialización general y los servicios de deserialización para las clases de contrato de datos. El ejemplo crea un objeto Record, lo serializa como secuencia de memoria y deserializa la secuencia de memoria como otro objeto Record para mostrar el uso de DataContractSerializer. El ejemplo serializa a continuación el objeto Record utilizando un sistema de escritura binario para mostrar cómo el sistema de escritura afecta a la serialización.

Nota:

El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.

El contrato de datos para Record se muestra en el código de ejemplo siguiente.

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

El código de ejemplo crea un Record objeto denominado record1 y, a continuación, muestra el objeto .

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

Luego, el ejemplo utiliza DataContractSerializer para serializar record1 en un flujo de memoria.

MemoryStream stream1 = new MemoryStream();

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

A continuación, el ejemplo usa DataContractSerializer para deserializar la secuencia de memoria en un nuevo objeto Record y lo muestra.

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

DataContractSerializer codifica por defecto los objetos en una secuencia mediante una representación textual de XML. Sin embargo, puede influir en la codificación del XML utilizando un escritor diferente. En el ejemplo se crea un escritor binario llamando a CreateBinaryWriter. Pasa a continuación el sistema de escritura y el objeto de registro al serializador cuando llama WriteObjectContent. Finalmente, el ejemplo vacía el sistema de escritura e informa de la longitud de las secuencias.

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

Al ejecutar el ejemplo, se muestran el registro original y el registro deserializado, seguido de la comparación entre la longitud de la codificación de texto y la codificación binaria. Presione ENTRAR en la ventana del cliente para apagar el 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 y ejecutar el ejemplo

  1. Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.

  2. Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples.

  3. Para ejecutar el ejemplo, inicie el cliente desde la línea de comandos escribiendo cliente\bin\client.exe.