次の方法で共有


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

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

エクスポート プロセス

スキーマ エクスポート プロセスは、1 つ以上の型から始まり、これらの型の XML プロジェクションを記述する XmlSchemaSet を生成します。

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

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

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

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

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

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

    Export メソッドを複数回呼び出した場合、同じXmlSchemaSetに複数の項目が追加されます。 型が既に存在する場合、型は XmlSchemaSet に生成されません。 そのため、同じExportXsdDataContractExporterを複数回呼び出すことは、XsdDataContractExporter クラスの複数のインスタンスを作成する場合に適しています。 これにより、重複するスキーマ型が生成されるのを回避できます。

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

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

エクスポート オプション

OptionsXsdDataContractExporter プロパティを ExportOptions クラスのインスタンスに設定して、エクスポート プロセスのさまざまな側面を制御できます。 具体的には、次のオプションを設定できます。

  • KnownTypes。 この Type のコレクションは、エクスポートされる型の既知の型を表します。 (詳細については、「データ コントラクトの既知の型」を参照してください)。これらの既知の型は、Export メソッドに渡される型に加えて、すべてのExport呼び出しでエクスポートされます。

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

ヘルパー メソッド

スキーマをエクスポートする主な役割に加えて、 XsdDataContractExporter には、型に関する情報を提供するいくつかの便利なヘルパー メソッドが用意されています。 これらには次のものが含まれます。

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

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

  • GetSchemaType メソッド このメソッドは、スキーマで匿名型として表される IXmlSerializable 型でのみ機能し、他のすべての型の null を返します。 匿名型の場合、このメソッドは特定のXmlSchemaTypeを表すTypeを返します。

エクスポート オプションは、これらのすべてのメソッドに影響します。

こちらも参照ください