Aracılığıyla paylaş


DataContractSerializer Örneği

DataContractSerializer örneği, veri sözleşmesi sınıfları için genel serileştirme ve seri durumdan çıkarma hizmetleri gerçekleştiren DataContractSerializer öğesini gösterir. Örnek, bir Record nesnesi oluşturur, bunu bir bellek akışına serileştirir ve Record kullanımını göstermek için bellek akışını başka bir DataContractSerializer nesneye deserileştirir. Örnek, yazıcının serileştirmeyi nasıl etkilediğini göstermek için ikili bir yazıcı kullanarak Record nesnesini serileştirir.

Uyarı

Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda yer alır.

için Record veri sözleşmesi aşağıdaki örnek kodda gösterilmiştir.

[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}";
    }
}

Örnek kod adlı Record bir record1 nesne oluşturur ve nesneyi görüntüler.

Record record1 = new Record(1, 2, "+", 3);
Console.WriteLine("Original record: {0}", record1.ToString());

Örnek, DataContractSerializer öğesini bir bellek akışına dönüştürmek üzere seri hale getirmek için record1 kullanır.

MemoryStream stream1 = new MemoryStream();

//Serialize the Record object to a memory stream using DataContractSerializer.
DataContractSerializer serializer = new DataContractSerializer(typeof(Record));
serializer.WriteObject(stream1, record1);

Daha sonra örnek, bellek akışını yeni bir DataContractSerializer nesnesine yeniden deseriyalize etmek için Record öğesini kullanır ve sonucu görüntüler.

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());

Varsayılan olarak, XML'nin DataContractSerializer metinsel gösterimini kullanarak nesneleri bir akışa kodlar. Ancak, farklı bir yazma aracı kullanarak XML kodlamasını etkileyebilirsiniz. Örnek, CreateBinaryWriter çağırarak bir ikili yazıcı oluşturur. Daha sonra WriteObjectContent'yi çağırdığında yazıcıyı ve kayıt nesnesini serileştiriciye geçirir. Son olarak, örnek yazıcıyı boşaltır ve akışların uzunlukları hakkında rapor verir.

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);

Örneği çalıştırdığınızda özgün kayıt ve seri durumdan çıkarılmış kayıt görüntülenir ve ardından metin kodlamasının uzunluğu ile ikili kodlama arasındaki karşılaştırma gösterilir. İstemciyi kapatmak için istemci penceresinde ENTER tuşuna basın.

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.

Örneği ayarlamak, derlemek ve çalıştırmak için

  1. Windows Communication Foundation Örnekleri içinOne-Time Kurulum Yordamını yaptığınızdan emin olun.

  2. Çözümün C# veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örneklerioluşturma başlığındaki yönergeleri izleyin.

  3. Örneği çalıştırmak için,\bin\client.execlient yazarak komut isteminden istemciyi başlatın.