共用方式為


XMLSerializer 範例

XmlSerializer 範例會示範如何序列化和還原序列化與 XmlSerializer 相容的型別。 預設的 Windows Communication Foundation (WCF) 格式器是 DataContractSerializer 類別。 當無法使用 XmlSerializer 類別時,DataContractSerializer 類別可以用來序列化與還原序列化型別。 這時通常需要精確控制 XML,例如,當資料片段必須是 XML 屬性而且不是 XML 項目的情況下。 建立非 WCF 服務的用戶端時,通常也會自動選取 XmlSerializer

在這個範例中,用戶端是主控台應用程式 (.exe),而服務則是由網際網路資訊服務 (IIS) 所裝載。

注意

此範例的安裝程序與建置指示位於本主題的結尾。

ServiceContractAttributeXmlSerializerFormatAttribute 必須套用至介面,如下列範例程式碼所示。

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

ComplexNumber 類別的 Public 成員會由 XmlSerializer 序列化成 XML 屬性。 DataContractSerializer 無法用來建立這類 XML 執行個體。

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

}

服務實作會計算並傳回適當的結果,即接受並傳回 ComplexNumber 型別的值。

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

用戶端實作也會使用複數。 服務合約與資料型別都會定義於 generatedClient.cs 來源檔案中,而這個檔案是從服務中繼資料的 ServiceModel 中繼資料公用程式工具 (Svcutil.exe) 產生的。 在這個範例中,Svcutil.exe 能夠偵測合約何時無法由 DataContractSerializer 序列化,而還原成發出 XmlSerializable 型別。 如果要強制使用 XmlSerializer,您可以將 /serializer:XmlSerializer (使用 XmlSerializer) 命令選項傳遞至 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);
    …
}

當您執行範例時,作業要求和回應會顯示在用戶端主控台視窗中。 在用戶端視窗中按下 ENTER 鍵,即可關閉用戶端。

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.

若要安裝、建置及執行範例

  1. 確定您已執行 Windows Communication Foundation 範例的一次性安裝程序

  2. 若要建置方案的 C# 或 Visual Basic .NET 版本,請遵循 Building the Windows Communication Foundation Samples中的指示。

  3. 若要在單一或多部電腦組態中執行此範例,請遵循執行 Windows Communication Foundation 範例中的指示進行。