スキーマのインポートとエクスポート
Windows Communication Foundation (WCF) には新しいシリアル化エンジン、DataContractSerializer が含まれます。DataContractSerializer は、.NET Framework オブジェクトと XML を双方向で変換します。このシリアライザ自体の他に、WCF には、関連するスキーマ インポート機構とスキーマ エクスポート機構が用意されています。スキーマとは、シリアライザが生成するか、またはデシリアライザがアクセスできる XML の形状に関する記述で、正式かつ正確であり、コンピュータによる読み取りが可能です。WCF は、多数のサードパーティ プラットフォームとの広範な相互運用性を有する W3C (World Wide Web Consortium) XML スキーマ定義言語 (XSD: XML Schema Definition Language) をスキーマ表現として使用します。
スキーマ インポート コンポーネント XsdDataContractImporter は、XSD スキーマ ドキュメントを受け取って、シリアル化された形式が特定のスキーマに対応するように .NET Framework クラス (通常、データ コントラクト クラス) を生成します。
たとえば、次のスキーマ フラグメントがあるとします。
これは、読みやすいように、やや簡素化された次の型を生成します。
生成された型は、「ベスト プラクティス : データ コントラクトのバージョン管理」に記載されているデータ コントラクトに関する以下のベスト プラクティスに従っていることに注意してください。
- IExtensibleDataObject インターフェイスを実装する型。詳細な情報については、次のページを参照してください。 「上位互換性のあるデータ コントラクト」を参照してください。
- データ メンバは、プライベート フィールドをラップするパブリック プロパティとして実装されます。
- クラスは部分クラスであり、生成されたコードを変更せずに追加を行うことができます。
XsdDataContractExporter では反転を実行できます。つまり、DataContractSerializer によってシリアル化できる型を受け取って XSD スキーマ ドキュメントを生成できます。
忠実性は保証されない
スキーマや型のラウンド トリップでの完全な忠実性は保証されません (ラウンド トリップとは、スキーマをインポートしてクラスのセットを作成し、作成結果をエクスポートして再びスキーマを生成することを意味します)。同じスキーマが返されない場合があります。また、これとは逆のプロセスでも忠実性は保証されません (スキーマを生成する型をエクスポートしてから、型をインポートし直す場合です。この場合も、同じ型が返されない可能性があります)。
サポートされている型
データ コントラクト モデルは、WC3 スキーマの限られたサブセットしかサポートしません。このサブセットに準拠しないスキーマを使用すると、インポート プロセスで例外が発生します。たとえば、データ コントラクトのデータ メンバを XML 属性としてシリアル化するように指定することはできません。したがって、XML 属性を使用する必要があるスキーマはサポートされず、適切な XML 投影を持つデータ コントラクトを生成できないため、インポート時に例外が発生します。
たとえば、次のスキーマ フラグメントは、既定のインポート設定を使用してインポートすることはできません。
詳細な情報については、次のページを参照してください。 「データ コントラクト スキーマの参照」を参照してください。スキーマがデータ コントラクト ルールに準拠していない場合は、別のシリアル化エンジンを使用します。たとえば、XmlSerializer は、独自のスキーマ インポート機構を使用します。また、サポートされるスキーマの範囲を拡張する特別なインポート モードもあります。詳細な情報については、次のページを参照してください。 「クラスを作成するためのスキーマのインポート」の IXmlSerializable 型の生成に関するセクションを参照してください。
XsdDataContractExporter は、DataContractSerializer によってシリアル化できるすべての .NET Framework 型をサポートします。詳細な情報については、次のページを参照してください。 「データ コントラクト シリアライザでサポートされる型」を参照してください。通常、XsdDataContractExporter を使用して作成されたスキーマは、XmlSchemaProviderAttribute を使用してカスタマイズしない限り、XsdDataContractImporter で使用できる有効なデータです。
XsdDataContractImporter の使用詳細については、 、「クラスを作成するためのスキーマのインポート」を参照してください。
XsdDataContractExporter の使用詳細については、 、「クラスからのスキーマのエクスポート」を参照してください。
関連項目
リファレンス
DataContractSerializer
XsdDataContractImporter
XsdDataContractExporter