Condividi tramite


Esempio di DataContractSerializer

L'esempio DataContractSerializer illustra DataContractSerializer che esegue servizi generali di serializzazione e deserializzazione per le classi dei contratti dati. L'esempio crea un Record oggetto , lo serializza in un flusso di memoria e deserializza il flusso di memoria in un altro Record oggetto per illustrare l'uso di DataContractSerializer. L'esempio serializza quindi l'oggetto Record utilizzando un writer binario per dimostrare come il writer incida sulla serializzazione.

Annotazioni

La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.

Il contratto dati per Record è illustrato nel codice di esempio seguente.

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

Il codice di esempio crea un Record oggetto denominato record1 e quindi visualizza l'oggetto .

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

L'esempio usa quindi DataContractSerializer per serializzare record1 in un flusso di 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);

Successivamente, l'esempio utilizza DataContractSerializer per deserializzare nuovamente il flusso di memoria in un nuovo oggetto Record e lo visualizza.

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

Per impostazione predefinita, DataContractSerializer codifica gli oggetti in un flusso usando una rappresentazione testuale di XML. Tuttavia, è possibile influenzare la codifica del codice XML passando un writer diverso. L'esempio crea un writer binario chiamando CreateBinaryWriter. Passa quindi il writer e l'oggetto record al serializzatore quando chiama WriteObjectContent. Infine, l'esempio svuota il buffer e segnala la lunghezza dei flussi.

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 si esegue l'esempio, vengono visualizzati il record originale e il record deserializzato, seguito dal confronto tra la lunghezza della codifica del testo e la codifica binaria. Premere INVIO nella finestra del client per chiudere il client.

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.

Per configurare, compilare ed eseguire l'esempio

  1. Assicurati di aver eseguito la procedura di installazione di One-Time per gli esempi di Windows Communication Foundation.

  2. Per compilare l'edizione C# o Visual Basic .NET della soluzione, seguire le istruzioni in Compilazione degli esempi di Windows Communication Foundation.

  3. Per eseguire l'esempio, avviare il client dal prompt dei comandi digitando client\bin\client.exe.