Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’exemple DataContractSerializer illustre les DataContractSerializerservices de sérialisation et de désérialisation généraux pour les classes de contrat de données. L’exemple crée un Record objet, le sérialise dans un flux de mémoire et désérialise le flux de mémoire vers un autre Record objet pour illustrer l’utilisation de l’objet DataContractSerializer. 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 et les instructions de génération de cet exemple se trouvent à la fin de cette rubrique.
Le contrat de données pour Record est présenté dans l'exemple de code suivant.
[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}";
}
}
L’exemple de code crée un Record objet nommé record1 puis affiche l’objet.
Record record1 = new Record(1, 2, "+", 3);
Console.WriteLine("Original record: {0}", record1.ToString());
L’exemple utilise ensuite la DataContractSerializer méthode 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);
Ensuite, l'exemple utilise DataContractSerializer pour désérialiser le flux de mémoire en un nouvel objet Record et l'affiche.
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, DataContractSerializer encode les objets dans un flux en utilisant une représentation textuelle du XML. Toutefois, vous pouvez influencer l’encodage du XML en utilisant un autre écrivain. L'exemple crée un BinaryWriter 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é sont affichés, suivis de la comparaison entre la longueur de l’encodage de texte et l’encodage binaire. Appuyez sur Entrée dans la fenêtre du client pour arrêter le 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.
Pour configurer, générer et exécuter l’exemple
Assurez-vous d’avoir effectué la 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 Building the Windows Communication Foundation Samples.
Pour exécuter l’exemple, démarrez le client à partir de l’invite de commandes en tapant le client\bin\client.exe.