Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Пример DataContractSerializer демонстрирует DataContractSerializer, который предоставляет общие функции сериализации и десериализации для классов контрактов данных. Пример создает Record объект, сериализует его в поток памяти и десериализирует поток памяти обратно в другой Record объект, чтобы продемонстрировать использование объекта DataContractSerializer. Затем пример сериализует Record объект с помощью двоичного модуля записи, чтобы продемонстрировать, как модуль записи влияет на сериализацию.
Замечание
Процедура установки и инструкции по сборке для этого примера находятся в конце этого раздела.
Контракт данных для 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 $"Record: {n1} {operation} {n2} = {result}";
}
}
В примере кода создается Record объект с именем record1 , а затем отображается объект.
Record record1 = new Record(1, 2, "+", 3);
Console.WriteLine("Original record: {0}", record1.ToString());
Затем в примере используется DataContractSerializer для сериализации record1 в поток памяти.
MemoryStream stream1 = new MemoryStream();
//Serialize the Record object to a memory stream using DataContractSerializer.
DataContractSerializer serializer = new DataContractSerializer(typeof(Record));
serializer.WriteObject(stream1, record1);
Далее в примере используется DataContractSerializer для десериализации потока памяти обратно в новый объект Record и его отображения.
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());
По умолчанию DataContractSerializer кодирует объекты в поток с помощью текстового представления XML. Однако можно повлиять на кодировку XML, передав другой модуль записи. В примере создается двоичный модуль записи путем вызова CreateBinaryWriter. Затем он передает записывающий элемент и объект записи данных сериализатору при вызове WriteObjectContent. Наконец, образец очищает модуль записи и сообщает о длине потоков.
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);
При запуске примера отображается исходная запись и десериализированная запись, за которой следует сравнение длины кодирования текста и двоичного кодирования. Нажмите клавишу ВВОД в окне клиента, чтобы завершить работу клиента.
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.
Настройка, сборка и запуск примера
Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.
Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .
Чтобы запустить пример, начните работу клиента из командной строки, введя client\bin\client.exe.