XmlSchemaProviderAttribute クラス


型に適用された場合、XML スキーマを返す型の静的メソッドの名前と、型のシリアル化を制御する XmlQualifiedName (または匿名型の XmlSchemaType) を格納します。When applied to a type, stores the name of a static method of the type that returns an XML schema and a XmlQualifiedName (or XmlSchemaType for anonymous types) that controls the serialization of the type.

public ref class XmlSchemaProviderAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Interface | System.AttributeTargets.Struct)]
public sealed class XmlSchemaProviderAttribute : Attribute
type XmlSchemaProviderAttribute = class
    inherit Attribute
Public NotInheritable Class XmlSchemaProviderAttribute
Inherits Attribute

次の例ではXmlSchemaProviderAttribute 、をサーバー側のクラスに適用します。The following example applies the XmlSchemaProviderAttribute to a server-side class. 呼び出されると、 MethodNameプロパティによって名前が付けられたメソッドによってスキーマが作成されます。When invoked, the method named by the MethodName property creates the schema. この単純な実装では、既存のスキーマをディスクから読み取ります。This simple implementation reads an existing schema off the disk. ただし、必要に応じて、 System.Xml.Schema名前空間で見つかった型を使用して、カスタムスキーマを作成することもできます。However, you can also create a custom schema, if necessary, using the types found in the System.Xml.Schema namespace.

public class SongStream : IXmlSerializable

    private const string ns = "http://demos.Contoso.com/webservices";
    private string filePath;

    public SongStream(){ }

    public SongStream(string filePath)
     this.filePath = filePath;

    // This is the method named by the XmlSchemaProviderAttribute applied to the type.
    public static XmlQualifiedName MySchema(XmlSchemaSet xs)
     // This method is called by the framework to get the schema for this type.
     // We return an existing schema from disk.

     XmlSerializer schemaSerializer = new XmlSerializer(typeof(XmlSchema));
     string xsdPath = null;
     // NOTE: replace the string with your own path.
     xsdPath = System.Web.HttpContext.Current.Server.MapPath("SongStream.xsd");
     XmlSchema s = (XmlSchema)schemaSerializer.Deserialize(
         new XmlTextReader(xsdPath), null);
     xs.XmlResolver = new XmlUrlResolver();

     return new XmlQualifiedName("songStream", ns);

    void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer)
       // This is the chunking code.
       // ASP.NET buffering must be turned off for this to work.

     int bufferSize = 4096;
     char[] songBytes = new char[bufferSize];
     FileStream inFile = File.Open(this.filePath, FileMode.Open, FileAccess.Read);

     long length = inFile.Length;

     // Write the file name.
     writer.WriteElementString("fileName", ns, Path.GetFileNameWithoutExtension(this.filePath));

     // Write the size.
     writer.WriteElementString("size", ns, length.ToString());

     // Write the song bytes.
     writer.WriteStartElement("song", ns);

     StreamReader sr = new StreamReader(inFile, true);
     int readLen = sr.Read(songBytes, 0, bufferSize);

     while (readLen > 0)
         writer.WriteStartElement("chunk", ns);
         writer.WriteChars(songBytes, 0, readLen);

         readLen = sr.Read(songBytes, 0, bufferSize);



    System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema()
     throw new System.NotImplementedException();

    void IXmlSerializable.ReadXml(System.Xml.XmlReader reader)
     throw new System.NotImplementedException();

<XmlSchemaProvider("MySchema")>  _
Public Class SongStream
    Implements IXmlSerializable
    Private Const ns As String = "http://demos.Contoso.com/webservices"
    Private filePath As String
    Public Sub New() 
    End Sub
    Public Sub New(ByVal filePath As String) 
        Me.filePath = filePath
    End Sub
    ' This is the method named by the XmlSchemaProviderAttribute applied to the type.
    Public Shared Function MySchema(ByVal xs As XmlSchemaSet) As XmlQualifiedName 
        ' This method is called by the framework to get the schema for this type.
        ' We return an existing schema from disk.
        Dim schemaSerializer As New XmlSerializer(GetType(XmlSchema))
        Dim xsdPath As String = Nothing
        ' NOTE: replace SongStream.xsd with your own schema file.
        xsdPath = System.Web.HttpContext.Current.Server.MapPath("SongStream.xsd")
        Dim s As XmlSchema = CType(schemaSerializer.Deserialize(New XmlTextReader(xsdPath)), XmlSchema)
        xs.XmlResolver = New XmlUrlResolver()
        Return New XmlQualifiedName("songStream", ns)
    End Function
    Sub WriteXml(ByVal writer As System.Xml.XmlWriter)  Implements IXmlSerializable.WriteXml
        ' This is the chunking code.
        ' ASP.NET buffering must be turned off for this to work.
        Dim bufferSize As Integer = 4096
        Dim songBytes(bufferSize) As Char
        Dim inFile As FileStream = File.Open(Me.filePath, FileMode.Open, FileAccess.Read)
        Dim length As Long = inFile.Length
        ' Write the file name.
        writer.WriteElementString("fileName", ns, Path.GetFileNameWithoutExtension(Me.filePath))
        ' Write the size.
        writer.WriteElementString("size", ns, length.ToString())
        ' Write the song bytes.
        writer.WriteStartElement("song", ns)
        Dim sr As New StreamReader(inFile, True)
        Dim readLen As Integer = sr.Read(songBytes, 0, bufferSize)
        While readLen > 0
            writer.WriteStartElement("chunk", ns)
            writer.WriteChars(songBytes, 0, readLen)
            readLen = sr.Read(songBytes, 0, bufferSize)
        End While
    End Sub 
    Function GetSchema() As System.Xml.Schema.XmlSchema  Implements IXmlSerializable.GetSchema
        Throw New System.NotImplementedException()
    End Function
    Sub ReadXml(ByVal reader As System.Xml.XmlReader)  Implements IXmlSerializable.ReadXml
        Throw New System.NotImplementedException()
    End Sub 
End Class 


XmlSchemaProviderAttribute主な目的は、web サービス記述XmlSchemaExporter言語ツール (wsdl.exe) によって照会されたとき、または Visual Studio の [web 参照の追加] 機能を使用しているときに、クラスがスキーマを返すことができるようにすることです。The main purpose of the XmlSchemaProviderAttribute is to enable the XmlSchemaExporter class to return a schema when queried by the Web Services Description Language tool (WSDL.exe), or when using the Add Web Reference feature of Visual Studio. 静的メソッドでは、型の実際のスキーマを制御できます。You can control the actual schema for the type in the static method.


属性のターゲットクラスは、インターフェイスをIXmlSerializable実装する必要があります。The target class of the attribute must implement the IXmlSerializable interface.

プロパティMethodNameは、リフレクションによって静的メソッドの名前を返します。The MethodName property returns the name of a static method through reflection. 実装する必要があるメソッドは、1つのパラメーター XmlSchemaSetを受け取る必要があります。このオブジェクトは、メソッドにXmlSchemaよってオブジェクトに設定されます。The method, which must be implemented, must take a single parameter, an XmlSchemaSet object, which the method populates with an XmlSchema object. また、メソッドは、データXmlQualifiedName型を識別するオブジェクトも返す必要があります。The method must also return an XmlQualifiedName object that identifies the data type.

匿名型を返すReturning Anonymous Types

を返すXmlQualifiedNameメソッドを使用して、匿名複合型を作成することはできません。An anonymous complex type cannot be created using a method that returns XmlQualifiedName. 匿名型には名前がなく、匿名型をスキーマに追加できないため、匿名型はとしてXmlSchemaType返される必要があります。Because an anonymous type has no name, and you cannot add an anonymous type to a schema, the anonymous type must be returned as an XmlSchemaType.



型の XML スキーマを提供する静的メソッドの名前を受け取って、XmlSchemaProviderAttribute クラスの新しいインスタンスを初期化します。Initializes a new instance of the XmlSchemaProviderAttribute class, taking the name of the static method that supplies the type's XML schema.



ターゲット クラスがワイルドカードかどうか、またはクラスのスキーマに xs:any 要素のみが含まれているかどうかを判断する値を取得または設定します。Gets or sets a value that determines whether the target class is a wildcard, or that the schema for the class has contains only an xs:any element.


型の XML スキーマおよびその XML スキーマ データ型の名前を提供する静的メソッドの名前を取得します。Gets the name of the static method that supplies the type's XML schema and the name of its XML Schema data type.


派生クラスで実装されると、この Attribute の一意の識別子を取得します。When implemented in a derived class, gets a unique identifier for this Attribute.

(継承元 Attribute)



このインスタンスが、指定されたオブジェクトと等価であるかどうかを示す値を返します。Returns a value that indicates whether this instance is equal to a specified object.

(継承元 Attribute)

このインスタンスのハッシュ コードを返します。Returns the hash code for this instance.

(継承元 Attribute)

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)

派生クラスでオーバーライドされるとき、このインスタンスの値が派生クラスの既定値であるかどうかを示します。When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(継承元 Attribute)

派生クラス内でオーバーライドされたときに、指定したオブジェクトとこのインスタンスが等しいかどうかを示す値を返します。When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(継承元 Attribute)

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)

現在のオブジェクトを表す string を返します。Returns a string that represents the current object.

(継承元 Object)


_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

一連の名前を対応する一連のディスパッチ識別子に割り当てます。Maps a set of names to a corresponding set of dispatch identifiers.

(継承元 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

オブジェクトの型情報を取得します。この情報はインターフェイスの型情報の取得に使用できます。Retrieves the type information for an object, which can be used to get the type information for an interface.

(継承元 Attribute)

オブジェクトが提供する型情報インターフェイスの数 (0 または 1) を取得します。Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(継承元 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

オブジェクトによって公開されたプロパティおよびメソッドへのアクセスを提供します。Provides access to properties and methods exposed by an object.

(継承元 Attribute)