XMLSerializer サンプル
このサンプルでは、XmlSerializer と互換性のある型をシリアル化および逆シリアル化する方法を示します。既定の Windows Communication Foundation (WCF) フォーマッタは DataContractSerializer クラスです。XmlSerializer クラスを使用すると、DataContractSerializer クラスを使用できない場合に、型をシリアル化および逆シリアル化できます。これは、XML を厳密に制御する必要がある場合、たとえば、データの一部が XML 属性であるが XML 要素ではない、などと制御する必要がある場合に多く該当します。さらに、XmlSerializer は、WCF 以外のサービスに対してクライアントを作成する場合に自動的に選択されることがよくあります。
この例では、クライアントはコンソール アプリケーション (.exe) で、サービスはインターネット インフォメーション サービス (IIS) によってホストされます。
メモ : |
---|
このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。 |
ServiceContractAttribute と XmlSerializerFormatAttribute をインターフェイスに適用する必要があります。次のサンプル コードを参照してください。
[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
クラスのパブリック メンバは、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 ソース ファイルで定義されます。このソース ファイルは、Service Metadata Utility Tool (Svcutil.exe) によってサービス メタデータから生成されたものです。コントラクトが DataContractSerializer でシリアル化されずにこの場合の送出元の XmlSerializable 型に戻る場合、Svcutil.exe で検出することができます。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.
サンプルを設定、ビルド、および実行するには
「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。
ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
単一コンピュータ構成か複数コンピュータ構成かに応じて、「Windows Communication Foundation サンプルの実行」の手順に従います。
Copyright © 2007 by Microsoft Corporation.All rights reserved.