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
Assicurarsi di aver eseguito Procedura di installazione singola per gli esempi di Windows Communication Foundation.
Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Generazione degli esempi Windows Communication Foundation.
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.