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

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

エクスポート処理

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

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

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

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

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

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

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

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

    Note

    エクスポート処理中に障害が発生した場合、 XmlSchemaSet は予測できない状態になります。

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

エクスポート オプション

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

  • KnownTypesType のコレクションであり、エクスポートされる型に対応する既知の型を表します (詳細については、「既知のデータ コントラクト型」を参照してください)。これらの既知の型は、Export メソッドに渡された型と共に、Export 呼び出しが行われるたびにエクスポートされます。

  • DataContractSurrogate. このプロパティを介して IDataContractSurrogate を渡すことにより、エクスポート処理をカスタマイズできます。 詳細については、「データ コントラクト サロゲート」を参照してください。 既定では、サロゲートは使用されません。

ヘルパー メソッド

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

  • GetRootElementName メソッド Type を受け取り、この型をルート オブジェクトとしてシリアル化した場合に使用されるルート要素名と名前空間を表す XmlQualifiedName を返します。

  • GetSchemaTypeName メソッド Type を引数とし、この型をスキーマにエクスポートした場合に使用される XSD スキーマ型の名前を表す XmlQualifiedName を返します。 スキーマ内で匿名型として表される IXmlSerializable 型を引数として渡すと、 nullを返します。

  • GetSchemaType メソッド スキーマ内で匿名型として表される IXmlSerializable 型を渡した場合にのみ有効なメソッドで、それ以外の型の場合は null を返します。 匿名型に対しては、特定の XmlSchemaType を表す Typeを返します。

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

関連項目