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 객체로 역직렬화하여 이를 표시합니다.
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());
기본적으로 XML의 DataContractSerializer
텍스트 표현을 사용하여 개체를 스트림으로 인코딩합니다. 그러나 다른 작성기를 전달하여 XML 인코딩에 영향을 줄 수 있습니다. 이 샘플은 CreateBinaryWriter을(를) 호출하여 이진 작성기를 만듭니다. 그런 다음 작성기와 레코드 개체를 호출할 때 WriteObjectContent을(를) serializer에 전달합니다. 마지막으로 샘플은 기록기를 비우고 데이터 스트림의 길이를 보고합니다.
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);
샘플을 실행하면 원래 레코드와 역직렬화된 레코드가 표시되고 텍스트 인코딩 길이와 이진 인코딩 간의 비교가 표시됩니다. 클라이언트 창에서 Enter 키를 눌러 클라이언트를 종료합니다.
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.
샘플을 설정, 빌드 및 실행하려면
Windows Communication Foundation 샘플 에 대한One-Time 설정 절차를 수행했는지 확인합니다.
솔루션의 C# 또는 Visual Basic .NET 버전을 빌드하려면 Windows Communication Foundation 샘플빌드의 지침을 따릅니다.
샘플을 실행하려면 클라이언트\bin\client.exe입력하여 명령 프롬프트에서 클라이언트를 시작합니다.