DataContractSerializer, exemple
Cet exemple illustre l'utilisation du sérialiseur DataContractSerializer, lequel est chargé d'effectuer des processus de sérialisation et de désérialisation standard pour les classes de contrat de données. Afin d'illustrer l'utilisation du DataContractSerializer, cet exemple crée un objet Record
, le sérialise dans un flux de mémoire et le désérialise à partir de ce même flux pour produire un autre objet Record
. L'exemple sérialise ensuite l'objet Record
à l'aide d'un enregistreur binaire afin d'illustrer la manière dont l'utilisation d'un tel enregistreur affecte la sérialisation.
Remarque : |
---|
La procédure d'installation ainsi que les instructions de génération relatives à cet exemple figurent en fin de rubrique. |
L'exemple de code suivant contient le contrat de données de l'objet Record
.
[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'exemple de code crée un objet Record
nommé record1
, puis affiche celui-ci.
Record record1 = new Record(1, 2, "+", 3);
Console.WriteLine("Original record: {0}", record1.ToString());
L'exemple utilise ensuite le DataContractSerializer pour sérialiser record1
dans un flux de mémoire.
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'exemple utilise ensuite le DataContractSerializer pour désérialiser le flux de mémoire dans un nouvel objet Record
, puis affiche ce nouvel objet.
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());
Par défaut, le sérialiseur DataContractSerializer
code les objets sous la forme d'un flux de données à l'aide d'une représentation XML textuelle. Toutefois, vous pouvez influencer les modalités de codage de la représentation XML en passant un enregistreur différent. L'exemple crée un enregistreur binaire en appelant CreateBinaryWriter. Il passe ensuite l'enregistreur et l'objet Record au sérialiseur lorsqu'il appelle WriteObjectContent. Enfin, l'exemple vide l'enregistreur et génère un rapport sur la longueur des flux de données.
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);
Lorsque vous exécutez l'exemple, l'enregistrement d'origine et l'enregistrement désérialisé s'affichent, suivis des différences de longueur entre le codage texte et le codage binaire. Appuyez sur ENTRÉE dans la fenêtre du client pour l'arrêter.
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.
Pour configurer, générer et exécuter l'exemple
Assurez-vous d'avoir effectué la procédure indiquée dans la section Procédure d'installation unique pour les exemples Windows Communication Foundation.
Pour générer l'édition C# ou Visual Basic .NET de la solution, conformez-vous aux instructions figurant dans Génération des exemples Windows Communication Foundation.
Pour exécuter l'exemple, démarrez le client à partir d'une invite de commandes en tapant client\bin\client.exe.
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.