XsdDataContractExporter クラス

定義

データ コントラクトで使用される一連の.NET型を XML スキーマ ファイル (.xsd) に変換できるようにします。

public ref class XsdDataContractExporter
public class XsdDataContractExporter
type XsdDataContractExporter = class
Public Class XsdDataContractExporter
継承
XsdDataContractExporter

次の例では、 XsdDataContractExporter のインスタンスを作成し、 Export(Type) メソッドを呼び出します。

using System;
using System.Xml;
using System.Runtime.Serialization;
using System.Xml.Schema;

public class Program
{
    public static void Main()
    {
        try
        {
            ExportXSD();
        }
        catch (Exception exc)
        {
            Console.WriteLine("Message: {0} StackTrace:{1}", exc.Message, exc.StackTrace);
        }
        finally
        {
            Console.ReadLine();
        }
    }

    static void ExportXSD()
    {
        XsdDataContractExporter exporter = new XsdDataContractExporter();
        if (exporter.CanExport(typeof(Employee)))
        {
            exporter.Export(typeof(Employee));
            Console.WriteLine("number of schemas: {0}", exporter.Schemas.Count);
            Console.WriteLine();
            XmlSchemaSet mySchemas = exporter.Schemas;

            XmlQualifiedName XmlNameValue = exporter.GetRootElementName(typeof(Employee));
            string EmployeeNameSpace = XmlNameValue.Namespace;

            foreach (XmlSchema schema in mySchemas.Schemas(EmployeeNameSpace))
            {
                schema.Write(Console.Out);
            }
        }
    }

    static void GetXmlElementName()
    {
        XsdDataContractExporter myExporter = new XsdDataContractExporter();
        XmlQualifiedName xmlElementName =myExporter.GetRootElementName(typeof(Employee));
        Console.WriteLine("Namespace: {0}", xmlElementName.Namespace);
        Console.WriteLine("Name: {0}", xmlElementName.Name);
        Console.WriteLine("IsEmpty: {0}", xmlElementName.IsEmpty);
    }

    [DataContract(Namespace = "www.Contoso.com/Examples/")]
    public class Employee
    {
        [DataMember]
        public string EmployeeName;
        [DataMember]
        private string ID;
    }
}
Imports System.Collections
Imports System.Xml
Imports System.Runtime.Serialization
Imports System.Xml.Schema

Public Class Program
    Public Shared Sub Main() 
        Try
            ExportXSD()
        Catch exc As Exception
            Console.WriteLine("Message: {0} StackTrace:{1}", exc.Message, exc.StackTrace)
        Finally
            Console.ReadLine()
        End Try
    
    End Sub 
    
    
    Shared Sub ExportXSD() 

        Dim exporter As New XsdDataContractExporter()

        ' Use the ExportOptions to add the Possessions type to the 
        ' collection of KnownTypes. 
        Dim eOptions As New ExportOptions()
        eOptions.KnownTypes.Add(GetType(Possessions))        
        exporter.Options = eOptions

        If exporter.CanExport(GetType(Employee)) Then
            exporter.Export(GetType(Employee))
            Console.WriteLine("number of schemas: {0}", exporter.Schemas.Count)
            Console.WriteLine()
            Dim mySchemas As XmlSchemaSet = exporter.Schemas
            
            Dim XmlNameValue As XmlQualifiedName = _
               exporter.GetRootElementName(GetType(Employee))
            Dim EmployeeNameSpace As String = XmlNameValue.Namespace
            
            Dim schema As XmlSchema
            For Each schema In  mySchemas.Schemas(EmployeeNameSpace)
                schema.Write(Console.Out)
            Next schema
        End If
    
    End Sub 
    
    
    Shared Sub GetXmlElementName() 
        Dim myExporter As New XsdDataContractExporter()
        Dim xmlElementName As XmlQualifiedName = myExporter. _
            GetRootElementName(GetType(Employee))
        Console.WriteLine("Namespace: {0}", xmlElementName.Namespace)
        Console.WriteLine("Name: {0}", xmlElementName.Name)
        Console.WriteLine("IsEmpty: {0}", xmlElementName.IsEmpty)
    
    End Sub 
    
    <DataContract([Namespace] := "www.Contoso.com/Examples/")>  _
    Public Class Employee

        <DataMember()>  _
        Public EmployeeName As String
        <DataMember()>  _
        Private ID As String
        ' This member may return a Possessions type.
        <DataMember> _
        public Miscellaneous As Hashtable 

    End Class 

    <DataContract> _
    Public Class Possessions

        <DataMember> _
        Public ItemName As String
    End Class

End Class

注釈

共通言語ランタイム (CLR) 型で表されるデータを組み込む Web サービスを作成し、他の Web サービスで使用する各型の XML スキーマをエクスポートする必要がある場合は、 XsdDataContractExporter クラスを使用します。 つまり、 XsdDataContractExporter は CLR 型のセットを XML スキーマに変換します。 (使用できる型の詳細については、「 データ コントラクト シリアライザーでサポートされる型」を参照してください)。その後、サービスと相互運用する必要がある他のユーザーが使用できるように、Web サービス記述言語 (WSDL) ドキュメントを介してスキーマを公開できます。

逆に、既存の Web サービスと相互運用する必要がある Web サービスを作成する場合は、 XsdDataContractImporter を使用して XML スキーマを変換し、選択したプログラミング言語でデータを表す CLR 型を作成します。

XsdDataContractExporterは、スキーマのコレクションを含むXmlSchemaSet オブジェクトを生成します。 Schemas() プロパティを使用してスキーマのセットにアクセスします。

Note

他の Web サービスが使用できる XML スキーマ定義 (XSD) ファイルをすばやく生成するには、 XsdDataContractExporterを使用します。

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

XML スキーマ ファイルを含む XmlSchemaSet クラスのインスタンスを作成するには、次の点に注意する必要があります。

エクスポートする型のセットは、データ コントラクトの内部セットとして記録されます。 したがって、 CanExport メソッドを複数回呼び出して、新しい型のみがセットに追加されるため、パフォーマンスを低下させることなくスキーマ セットに新しい型を追加できます。 Export操作中に、既存のスキーマが追加される新しいスキーマと比較されます。 競合が発生した場合は、例外がスローされます。 通常、同じデータ コントラクト名を持つが異なるコントラクト (異なるメンバー) を持つ 2 つの型が同じ XsdDataContractExporter インスタンスによってエクスポートされた場合、競合が検出されます。

エクスポーターを使用する

このクラスを使用する推奨される方法は次のとおりです。

  1. CanExportオーバーロードのいずれかを使用して、指定した型または型のセットをエクスポートできるかどうかを判断します。 要件に適したオーバーロードのいずれかを使用します。

  2. 対応する Export メソッドを呼び出します。

  3. Schemas プロパティからスキーマを取得します。

コンストラクター

名前 説明
XsdDataContractExporter()

XsdDataContractExporter クラスの新しいインスタンスを初期化します。

XsdDataContractExporter(XmlSchemaSet)

指定したスキーマ セットを使用して、 XsdDataContractExporter クラスの新しいインスタンスを初期化します。

プロパティ

名前 説明
Options

エクスポート操作に設定できるオプションを含む ExportOptions を取得または設定します。

Schemas

エクスポートされた XML スキーマのコレクションを取得します。

メソッド

名前 説明
CanExport(ICollection<Assembly>)

アセンブリのセットに含まれる .common language Runtime (CLR) 型のセットをエクスポートできるかどうかを示す値を取得します。

CanExport(ICollection<Type>)

ICollection<T>に含まれる .common language runtime (CLR) 型のセットをエクスポートできるかどうかを示す値を取得します。

CanExport(Type)

指定した共通言語ランタイム (CLR) 型をエクスポートできるかどうかを示す値を取得します。

Equals(Object)

指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
Export(ICollection<Assembly>)

指定したアセンブリのコレクションに含まれる型を変換します。

Export(ICollection<Type>)

このメソッドに渡される ICollection<T> に含まれる型を変換します。

Export(Type)

指定した .NET 型を XML スキーマ定義言語 (XSD) スキーマに変換します。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetRootElementName(Type)

Typeの最上位レベルの名前と名前空間を返します。

GetSchemaType(Type)

指定した型の XML スキーマ型を返します。

GetSchemaTypeName(Type)

Typeのコントラクト名とコントラクト名前空間を返します。

GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Objectの簡易コピーを作成します。

(継承元 Object)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象

こちらもご覧ください