Condividi tramite


Esempio di DataContractSerializer

Nell'esempio relativo a DataContractSerializer viene illustrata la classe DataContractSerializer, che esegue servizi generali di serializzazione e di deserializzazione per le classi del contratto dati. L'esempio crea un oggetto Record , lo serializza a un flusso di memoria e quindi deserializza il flusso di memoria a un altro oggetto Record per illustrare l'utilizzo di DataContractSerializer. L'esempio serializza quindi l'oggetto Record utilizzando un writer binario per illustrare come il writer influisce sulla serializzazione.

Nota

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

Il contratto dati per Record viene illustrato nell'esempio di codice 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 string.Format("Record: {0} {1} {2} = {3}", n1,            operation, n2, result);
    }
}

L'esempio di codice crea un oggetto Record denominato record1, quindi visualizza l'oggetto.

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

L'esempio utilizza 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);

L'esempio utilizza quindi DataContractSerializer per deserializzare di nuovo 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 utilizzando una rappresentazione testuale di XML. Tuttavia, è possibile influenzare la codifica del XML utilizzando un writer diverso. Nell'esempio viene creato un writer binario chiamando CreateBinaryWriter. Il writer e l'oggetto record vengono quindi passati al serializzatore quando chiama WriteObjectContent. Infine, l'esempio svuota il writer 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, seguiti dal confronto tra la lunghezza della codifica del testo e della codifica binaria. Premere INVIO nella finestra del client per arrestare 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 impostare, compilare ed eseguire l'esempio

  1. Assicurarsi di aver eseguito Procedura di installazione singola per gli esempi di Windows Communication Foundation.

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

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

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.