2009-05-06 10 views
2

私はいくつかのデータを取得するために公開するいくつかの操作を持つWCFサービスを設計しています。これらの操作は、xmlドキュメントをパラメータとして受け入れます。この文書のノードを、私が内部で使用するために作成したクラスにマップする方法はありますか?XML to .NETクラス

EDIT:厳密に型指定されたオブジェクトではなくxmlドキュメントを受け入れる理由の1つは、古いバージョンを使用している開発者の構造を壊すことを心配することなく将来apiを拡張できることです。クライアントに既存の実装を変更せずに進化できるapiを設計するためのより良い方法はありますか?

答えて

2

使用しているXMLドキュメントのスキーマ(XSD)がある場合は、.NET SDKに付属のxsd.exeを試すと、そのスキーマのクラスが生成されます。

2

はい、クラスを使用すると、XMLをオブジェクトに変換できます。逆も同様です。本当にクールで使いやすいです。単に.NETリフレクションを使用して、XML要素にマップされたクラスのパブリックプロパティを見つけるだけです。正確なXML形式は、XmlElementAttributeのような属性を使用して制御できます。

0

XMLReaderを直接使用するか、LINQ to XMLを使用してドキュメントをクラスにマップすることができます。

1

内部的にマップするクラスを使用してサービスインターフェイスを定義してみませんか?次に、マッピングを行う必要はありません。

+0

優秀なポイントWCFでサービスのバージョン管理のサポートで – Hemant

+1

て見える場合もバージョン管理でのみ関心がある場合、私は性質や種類を変更することであるかのようにしかし、私はクラスを公開したくありませんクラスでは、サービスを消費するクライアントもコードを変更する必要があります。また、xmlを通じて送信される値の限定されたセットに基づいて、サービスは他のプロパティを記入するカスタムロジックを持っています。 – Developer

+2

私はまだクラスを使用します。私はあなたがパブリックAPIから内部クラスを分離したいと思います。しかし、私はまだそれらのケースでクラスを使用しています - マッピングコードを持つクラスの別のセット(リフレクションと "自動"プロパティマッピングを利用することができます)。オプションの値には、NULL可能型を使用できます。 – JohnOpincar

1

オブジェクトを作成し、シリアル化/逆シリアル化関数を使用して、必要な構造に一致するクラスを手動で作成することもできます。

これは実際には非常に簡単なプロセスですが、このMSDN記事http://msdn.microsoft.com/en-us/library/ms950721.aspxは、概念を紹介するための長い道のりです。