Bagikan melalui


Contoh XMLSerializer

Sampel XmlSerializer mendemonstrasikan cara melakukan serialisasi dan deserialisasi jenis yang kompatibel dengan XmlSerializer. Formatter Windows Communication Foundation (WCF) default adalah DataContractSerializer kelas . Kelas XmlSerializer dapat digunakan untuk menserialisasikan dan mendeserialisasi jenis ketika DataContractSerializer kelas tidak dapat digunakan. Ini sering terjadi ketika kontrol yang tepat atas XML diperlukan - misalnya, jika sepotong data harus berupa atribut XML dan bukan elemen XML. Selain itu XmlSerializer , sering kali dipilih secara otomatis saat membuat klien untuk layanan non-WCF.

Dalam sampel ini, klien adalah aplikasi konsol (.exe) dan layanan dihosting oleh Internet Information Services (IIS).

Nota

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

ServiceContractAttribute dan XmlSerializerFormatAttribute harus diterapkan ke antarmuka seperti yang ditunjukkan dalam kode sampel berikut.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples"), XmlSerializerFormat]
public interface IXmlSerializerCalculator
{
    [OperationContract]
    ComplexNumber Add(ComplexNumber n1, ComplexNumber n2);
    [OperationContract]
    ComplexNumber Subtract(ComplexNumber n1, ComplexNumber n2);
    [OperationContract]
    ComplexNumber Multiply(ComplexNumber n1, ComplexNumber n2);
    [OperationContract]
    ComplexNumber Divide(ComplexNumber n1, ComplexNumber n2);
}

Anggota publik dari kelas ComplexNumber diserialisasi oleh XmlSerializer sebagai atribut XML. Tidak dapat menggunakan DataContractSerializer untuk membuat instans XML semacam ini.

public class ComplexNumber
{
    private double real;
    private double imaginary;

    [XmlAttribute]
    public double Real
    {
        get { return real; }
        set { real = value; }
    }

    [XmlAttribute]
    public double Imaginary
    {
        get { return imaginary; }
        set { imaginary = value; }
    }

    public ComplexNumber(double real, double imaginary)
    {
        this.Real = real;
        this.Imaginary = imaginary;
    }
    public ComplexNumber()
    {
        this.Real = 0;
        this.Imaginary = 0;
    }

}

Implementasi layanan menghitung dan mengembalikan hasil yang sesuai—menerima dan mengembalikan nilai jenis ComplexNumber .

public class XmlSerializerCalculatorService : IXmlSerializerCalculator
{
    public ComplexNumber Add(ComplexNumber n1, ComplexNumber n2)
    {
        return new ComplexNumber(n1.Real + n2.Real, n1.Imaginary +
                                                      n2.Imaginary);
    }
    …
}

Implementasi klien juga menggunakan angka kompleks. Kontrak layanan dan jenis data ditentukan dalam file sumber generatedClient.cs, yang dihasilkan oleh ServiceModel Metadata Utility Tool (Svcutil.exe) dari metadata layanan. Svcutil.exe dapat mendeteksi kapan kontrak tidak dapat diserialisasikan oleh DataContractSerializer dan beralih ke tipe XmlSerializable dalam kasus ini. Jika Anda ingin memaksa penggunaan XmlSerializer, Anda dapat meneruskan opsi perintah /serializer:XmlSerializer (gunakan XmlSerializer) ke alat Svcutil.exe.

// Create a client.
XmlSerializerCalculatorClient client = new
                         XmlSerializerCalculatorClient();

// Call the Add service operation.
ComplexNumber value1 = new ComplexNumber();
value1.Real = 1;
value1.Imaginary = 2;
ComplexNumber value2 = new ComplexNumber();
value2.Real = 3;
value2.Imaginary = 4;
ComplexNumber result = client.Add(value1, value2);
Console.WriteLine("Add({0} + {1}i, {2} + {3}i) = {4} + {5}i",
    value1.Real, value1.Imaginary, value2.Real, value2.Imaginary,
    result.Real, result.Imaginary);
    …
}

Saat Anda menjalankan sampel, permintaan dan respons operasi ditampilkan di jendela konsol klien. Tekan ENTER di jendela klien untuk mematikan klien.

Add(1 + 2i, 3 + 4i) = 4 + 6i
Subtract(1 + 2i, 3 + 4i) = -2 + -2i
Multiply(2 + 3i, 4 + 7i) = -13 + 26i
Divide(3 + 7i, 5 + -2i) = 0.0344827586206897 + 1.41379310344828i

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 dalam konfigurasi satu atau lintas komputer, ikuti instruksi di Menjalankan Sampel Windows Communication Foundation.