Bagikan melalui


Contoh DataContractSerializer

Sampel DataContractSerializer menunjukkan DataContractSerializer, yang melakukan layanan serialisasi dan deserialisasi umum untuk kelas kontrak data. Contoh ini membuat Record objek, menserialisasikannya ke aliran memori, mendeserialisasi aliran memori kembali ke objek Record lain untuk mendemonstrasikan penggunaan DataContractSerializer. Sampel kemudian melakukan serialisasi objek Record menggunakan penulis biner untuk menunjukkan bagaimana penulis memengaruhi serialisasi.

Nota

Prosedur penyiapan dan instruksi build untuk sampel ini terletak di akhir topik ini.

Kontrak data untuk Record ditampilkan dalam kode sampel berikut.

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

Kode sampel membuat Record objek bernama record1 lalu menampilkan objek.

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

Sampel kemudian menggunakan DataContractSerializer untuk men-serialisasi record1 ke dalam aliran memori.

MemoryStream stream1 = new MemoryStream();

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

Selanjutnya, sampel menggunakan DataContractSerializer untuk mendeserialisasi aliran memori kembali ke objek baru Record dan menampilkannya.

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

Secara default, mengodekan DataContractSerializer objek ke dalam aliran menggunakan representasi tekstual XML. Namun, Anda dapat memengaruhi pengodean XML dengan menggunakan objek penulis yang berbeda. Sampel membuat penulis biner dengan memanggil CreateBinaryWriter. Kemudian mengirimkan penulis dan objek rekaman ke serializer ketika memanggil WriteObjectContent. Terakhir, sampel membersihkan penulis dan melaporkan panjang aliran.

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

Saat Anda menjalankan sampel, rekaman asli dan rekaman deserialisasi ditampilkan, diikuti dengan perbandingan antara panjang pengodean teks dan pengodean biner. Tekan ENTER di jendela klien untuk mematikan klien.

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.

Untuk menyiapkan, mengompilasi, dan menjalankan sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan One-Time untuk Sampel Windows Communication Foundation.

  2. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti instruksi di Membangun Sampel Windows Communication Foundation.

  3. Untuk menjalankan sampel, mulai klien dari prompt perintah dengan mengetik klien\bin\client.exe.