Przykład elementu DataContractSerializer
Przykład DataContractSerializer przedstawia metodę DataContractSerializer, która wykonuje ogólne usługi serializacji i deserializacji dla klas kontraktów danych. Przykład tworzy Record
obiekt, serializuje go do strumienia pamięci i deserializuje strumień pamięci z powrotem do innego Record
obiektu w celu zademonstrowania użycia DataContractSerializerobiektu . Następnie próbka serializuje Record
obiekt przy użyciu modułu zapisywania binarnego, aby zademonstrować, jak składnik zapisywania wpływa na serializacji.
Uwaga
Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.
Kontrakt danych dla Record
elementu jest wyświetlany w poniższym przykładowym kodzie.
[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}";
}
}
Przykładowy kod tworzy Record
obiekt o nazwie record1
, a następnie wyświetla obiekt.
Record record1 = new Record(1, 2, "+", 3);
Console.WriteLine("Original record: {0}", record1.ToString());
Następnie przykład używa elementu DataContractSerializer do serializacji record1
do strumienia pamięci.
MemoryStream stream1 = new MemoryStream();
//Serialize the Record object to a memory stream using DataContractSerializer.
DataContractSerializer serializer = new DataContractSerializer(typeof(Record));
serializer.WriteObject(stream1, record1);
Następnie przykład używa elementu do DataContractSerializer deserializacji strumienia pamięci z powrotem do nowego Record
obiektu i wyświetla go.
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());
Domyślnie DataContractSerializer
obiekty są kodowane do strumienia przy użyciu tekstowej reprezentacji XML. Można jednak wpływać na kodowanie kodu XML, przekazując inny składnik zapisywania. Przykład tworzy moduł zapisywania binarnego przez wywołanie metody CreateBinaryWriter. Następnie przekazuje składnik zapisywania i obiekt rekordu do serializatora, gdy wywołuje WriteObjectContentmetodę . Na koniec przykład opróżnia składnik zapisywania i raportuje długość strumieni.
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);
Po uruchomieniu przykładu zostanie wyświetlony oryginalny rekord i zdeserializowany rekord, a następnie porównanie długości kodowania tekstu i kodowania binarnego. Naciśnij klawisz ENTER w oknie klienta, aby zamknąć klienta.
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.
Aby skonfigurować, skompilować i uruchomić przykład
Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.
Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).
Aby uruchomić przykład, uruchom klienta z wiersza polecenia, wpisując client\bin\client.exe.