クラスからのスキーマのエクスポート

データ コントラクト モデルで使用されているクラスから XML スキーマ定義言語 (XSD) スキーマを生成するには、XsdDataContractExporter クラスを使います。このトピックでは、スキーマの作成手順を説明します。

エクスポート処理

スキーマのエクスポート処理では、まず型の定義をエクスポートするので、型定義を XML 形式で記述した XmlSchemaSet を生成します。

XmlSchemaSet は、一連の XSD スキーマ ドキュメントを表す .NET Framework のスキーマ オブジェクト モデル (SOM) の一部です。XSD ドキュメントを XmlSchemaSet から生成するために、XmlSchemaSet クラスの Schemas プロパティから取得した、スキーマのコレクションを使います。次に各 XmlSchema オブジェクトを、XmlSerializer を使ってシリアル化します。

スキーマをエクスポートするには

  1. XsdDataContractExporter のインスタンスを作成します。

  2. 省略可能。XmlSchemaSet をコンストラクタに渡します。この場合、空の XmlSchemaSet から開始するのではなく、スキーマのエクスポート時に生成されたスキーマが、この XmlSchemaSet インスタンスに追加されます。

  3. 省略可能。CanExport メソッドのいずれかを呼び出します。指定された型がエクスポート可能かどうかを判定するメソッドです。このメソッドには、次に説明する Export メソッドと同じオーバーロードがあります。

  4. Export メソッドのいずれかを呼び出します。TypeType オブジェクトの List、または Assembly オブジェクトの List を受け取る 3 種類のオーバーロードがあります。3 つ目のメソッドの場合、指定されたアセンブリのすべての型がエクスポートされます。

    Export メソッドを何度も呼び出すと、同じ XmlSchemaSet に複数の項目が追加されます。XmlSchemaSet に既に存在する型は生成されません。したがって、XsdDataContractExporter クラスのインスタンスを複数作成するのではなく、同じ XsdDataContractExporter に対して Export を複数回呼び出すようにします。これにより、同じスキーマ型が重複して生成される状況を回避できます。

    Aa702692.note(ja-jp,VS.90).gifメモ :
    エクスポート処理中に障害が発生した場合、XmlSchemaSet は予測できない状態になります。

  5. Schemas プロパティを介して、XmlSchemaSet にアクセスします。

エクスポート オプション

XsdDataContractExporterOptions プロパティとして ExportOptions クラスのインスタンスを設定することにより、エクスポート処理の方法を制御できます。具体的には、次のオプションを設定できます。

  • KnownTypes: Type のコレクションであり、エクスポートされる型に対応する既知の型を表します (詳細な情報については、次のページを参照してください。 「既知のデータ コントラクト型」を参照してください)。これらの既知の型は、Export メソッドに渡された型と共に、Export 呼び出しが行われるたびにエクスポートされます。
  • DataContractSurrogate: このプロパティを介して IDataContractSurrogate を渡すことにより、エクスポート処理をカスタマイズできます。詳細な情報については、次のページを参照してください。 「データ コントラクト サロゲート」を参照してください。既定では、サロゲートは使用されません。

ヘルパー メソッド

XsdDataContractExporter には、主要な機能であるスキーマのエクスポート処理に加え、型に関する情報を調べるためのヘルパー メソッドが定義されています。具体的には次のようなメソッドです。

  • GetRootElementName メソッド : Type を受け取り、この型をルート オブジェクトとしてシリアル化した場合に使用されるルート要素名と名前空間を表す XmlQualifiedName を返します。
  • GetSchemaTypeName メソッド : Type を引数とし、この型をスキーマにエクスポートした場合に使用される XSD スキーマ型の名前を表す XmlQualifiedName を返します。スキーマ内で匿名型として表される IXmlSerializable 型を引数として渡すと、null を返します。
  • GetSchemaType メソッド : スキーマ内で匿名型として表される IXmlSerializable 型を渡した場合にのみ有効なメソッドで、それ以外の型の場合は null を返します。匿名型に対しては、特定の Type を表す XmlSchemaType を返します。

以上のメソッドの動作は、エクスポート オプションの影響を受けます。

関連項目

リファレンス

DataContractSerializer
XsdDataContractImporter
XsdDataContractExporter

概念

スキーマのインポートとエクスポート
クラスを作成するためのスキーマのインポート