Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пример 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.