Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase XmlSchemaProviderAttribute

 

Publicado: octubre de 2016

Cuando se aplica a un tipo, almacena el nombre de un método estático del tipo que devuelve un esquema XML y un XmlQualifiedName (o XmlSchemaType para tipos anónimos) que controla la serialización del tipo.

Espacio de nombres:   System.Xml.Serialization
Ensamblado:  System.Xml (en System.Xml.dll)

System.Object
  System.Attribute
    System.Xml.Serialization.XmlSchemaProviderAttribute

[AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface)]
public sealed class XmlSchemaProviderAttribute : Attribute

NombreDescripción
System_CAPS_pubmethodXmlSchemaProviderAttribute(String)

Inicializa una nueva instancia de la clase XmlSchemaProviderAttribute y toma el nombre del método estático que proporciona el esquema XML del tipo.

NombreDescripción
System_CAPS_pubpropertyIsAny

Obtiene o establece un valor que determina si la clase de destino es un carácter comodín o que el esquema para la clase contiene solo un elemento xs:any.

System_CAPS_pubpropertyMethodName

Obtiene el nombre del método estático que proporciona el esquema XML del tipo y el nombre del tipo de datos de su esquema XML.

System_CAPS_pubpropertyTypeId

Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.(Heredado de Attribute).

NombreDescripción
System_CAPS_pubmethodEquals(Object)

Esta API admite la infraestructura producto y no está diseñada para usarse directamente desde el código. Devuelve un valor que indica si esta instancia es igual que un objeto especificado.(Heredado de Attribute).

System_CAPS_pubmethodGetHashCode()

Devuelve el código hash de esta instancia.(Heredado de Attribute).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethodIsDefaultAttribute()

Si se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada.(Heredado de Attribute).

System_CAPS_pubmethodMatch(Object)

Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado.(Heredado de Attribute).

System_CAPS_pubmethodToString()

Devuelve una cadena que representa el objeto actual.(Heredado de Object).

NombreDescripción
System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.(Heredado de Attribute).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Obtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz.(Heredado de Attribute).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1).(Heredado de Attribute).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Proporciona acceso a las propiedades y los métodos expuestos por un objeto.(Heredado de Attribute).

El propósito principal de la XmlSchemaProviderAttribute es permitir la XmlSchemaExporter clase para devolver un esquema cuando lo solicita la herramienta Lenguaje de descripción de servicios Web (WSDL.exe) o cuando se usa el Agregar referencia Web característica de Visual Studio. Puede controlar el esquema real para el tipo en el método estático.

System_CAPS_noteNota

La clase de destino del atributo debe implementar la IXmlSerializable interfaz.

El MethodName propiedad devuelve el nombre de un método estático mediante reflexión. El método, que se debe implementar, debe tomar un único parámetro, un XmlSchemaSet objeto, que el método rellena con un XmlSchema objeto. El método también debe devolver un XmlQualifiedName objeto que identifica el tipo de datos.

No se puede crear un tipo complejo anónimo utilizando un método que devuelve XmlQualifiedName. Dado que un tipo anónimo no tiene nombre y no se puede agregar un tipo anónimo a un esquema, el tipo anónimo debe devolverse como una XmlSchemaType.

El ejemplo siguiente aplica el XmlSchemaProviderAttribute a una clase de servidor. Cuando se invoca, el método llamado por el MethodName propiedad crea el esquema. Esta sencilla implementación lee un esquema existente fuera del disco. Sin embargo, también puede crear un esquema personalizado, si es necesario, utilizando los tipos que se encuentra en la System.Xml.Schema espacio de nombres.

[XmlSchemaProvider("MySchema")]
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();
     xs.Add(s);

     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);
         writer.WriteEndElement();

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

     writer.WriteEndElement();
     inFile.Close();

    }


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

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

    }
}

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 2.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: