データ コントラクト モデルで使用されるクラスから XML スキーマ定義言語 (XSD) スキーマを生成するには、 XsdDataContractExporter クラスを使用します。 このトピックでは、スキーマを作成するプロセスについて説明します。
エクスポート プロセス
スキーマ エクスポート プロセスは、1 つ以上の型から始まり、これらの型の XML プロジェクションを記述する XmlSchemaSet を生成します。
XmlSchemaSet
は、XSD スキーマ ドキュメントのセットを表す .NET Framework のスキーマ オブジェクト モデル (SOM) の一部です。
XmlSchemaSet
から XSD ドキュメントを作成するには、Schemas クラスのXmlSchemaSet
プロパティからスキーマのコレクションを使用します。 次に、XmlSchemaを使用して各XmlSerializer オブジェクトをシリアル化します。
スキーマをエクスポートするには
XsdDataContractExporterのインスタンスを作成します。
任意。 コンストラクターに XmlSchemaSet を渡します。 この場合、スキーマのエクスポート中に生成されたスキーマは、空白のXmlSchemaSetで始まるのではなく、このXmlSchemaSet インスタンスに追加されます。
任意。 CanExport メソッドのいずれかを呼び出します。 このメソッドは、指定した型をエクスポートできるかどうかを決定します。 メソッドには、次の手順で
Export
メソッドと同じオーバーロードがあります。Export メソッドのいずれかを呼び出します。 Type、 List<T> オブジェクトの
Type
、または List<T> オブジェクトの Assembly を受け取る 3 種類のオーバーロードがあります。 最後のケースでは、指定されたすべてのアセンブリのすべての型がエクスポートされます。Export
メソッドを複数回呼び出した場合、同じXmlSchemaSet
に複数の項目が追加されます。 型が既に存在する場合、型はXmlSchemaSet
に生成されません。 そのため、同じExport
でXsdDataContractExporter
を複数回呼び出すことは、XsdDataContractExporter
クラスの複数のインスタンスを作成する場合に適しています。 これにより、重複するスキーマ型が生成されるのを回避できます。注
エクスポート中にエラーが発生した場合、
XmlSchemaSet
は予測できない状態になります。XmlSchemaSet プロパティを使用してSchemasにアクセスします。
エクスポート オプション
OptionsのXsdDataContractExporter プロパティを ExportOptions クラスのインスタンスに設定して、エクスポート プロセスのさまざまな側面を制御できます。 具体的には、次のオプションを設定できます。
KnownTypes。 この
Type
のコレクションは、エクスポートされる型の既知の型を表します。 (詳細については、「データ コントラクトの既知の型」を参照してください)。これらの既知の型は、Export
メソッドに渡される型に加えて、すべてのExport
呼び出しでエクスポートされます。DataContractSurrogate。 エクスポート プロセスをカスタマイズするこのプロパティを使用して、 IDataContractSurrogate を指定できます。 詳細については、「 データ コントラクトサロゲート」を参照してください。 既定では、サロゲートは使用されません。
ヘルパー メソッド
スキーマをエクスポートする主な役割に加えて、 XsdDataContractExporter
には、型に関する情報を提供するいくつかの便利なヘルパー メソッドが用意されています。 これらには次のものが含まれます。
GetRootElementName メソッド このメソッドは
Type
を受け取り、この型がルート オブジェクトとしてシリアル化された場合に使用されるルート要素名と名前空間を表す XmlQualifiedName を返します。GetSchemaTypeName メソッド このメソッドは、
Type
を受け取り、この型がスキーマにエクスポートされた場合に使用される XSD スキーマ型の名前を表す XmlQualifiedName を返します。 スキーマで匿名型として表される IXmlSerializable 型の場合、このメソッドはnull
を返します。GetSchemaType メソッド このメソッドは、スキーマで匿名型として表される IXmlSerializable 型でのみ機能し、他のすべての型の
null
を返します。 匿名型の場合、このメソッドは特定のXmlSchemaTypeを表すType
を返します。
エクスポート オプションは、これらのすべてのメソッドに影響します。