Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

XmlChoiceIdentifierAttribute (Clase)

Especifica que el miembro puede ser detectado más a fondo mediante una enumeración.

System.Object
  System.Attribute
    System.Xml.Serialization.XmlChoiceIdentifierAttribute

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

[AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, AllowMultiple = false)]
public class XmlChoiceIdentifierAttribute : Attribute

El tipo XmlChoiceIdentifierAttribute expone los siguientes miembros.

  NombreDescripción
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsXmlChoiceIdentifierAttribute()Inicializa una nueva instancia de la clase de XmlChoiceIdentifierAttribute .
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsXmlChoiceIdentifierAttribute(String)Inicializa una nueva instancia de la clase de XmlChoiceIdentifierAttribute .
Arriba

  NombreDescripción
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsMemberNameObtiene o establece el nombre del campo que devuelve la enumeración para utilizar el detectar tipos.
Propiedad públicaTypeIdCuando se implementa en una clase derivada, obtiene un identificador único para este Attribute. (Se hereda de Attribute).
Arriba

  NombreDescripción
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsEqualsInfraestructura. Devuelve un valor que indica si esta instancia equivale al objeto especificado. (Se hereda de Attribute).
Método protegidoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsFinalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetHashCodeDevuelve el código hash de esta instancia. (Se hereda de Attribute).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetType Obtiene el Typede la instancia actual. (Se hereda de Object).
Método públicoIsDefaultAttributeCuando se invalida en una clase derivada, indica si el valor de esta instancia es el valor predeterminado para la clase derivada. (Se hereda de Attribute).
Método públicoCompatible con XNA FrameworkMatch Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual al objeto especificado. (Se hereda de Attribute).
Método protegidoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsMemberwiseClone Crea una copia superficial del Object actual. (Se hereda de Object).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Arriba

  NombreDescripción
Implementación explícita de interfacesMétodo privado_Attribute.GetIDsOfNamesAsigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío. (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado_Attribute.GetTypeInfoObtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz. (Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado_Attribute.GetTypeInfoCount

Recupera el número de interfaces de tipo de información que suministra un objeto (0 ó 1)

(Se hereda de Attribute).
Implementación explícita de interfacesMétodo privado_Attribute.InvokeProporciona acceso a las propiedades y los métodos expuestos por un objeto. (Se hereda de Attribute).
Arriba

El elemento xsi:choice denominado definición de esquema XML se utiliza para definir un elemento complejo que puede contener un elemento secundario de una instancia (maxoccurs = 1). Que el elemento secundario puede ser uno de varios tipos, y puede tener uno o varios nombres. Cada nombre está asociado a un tipo específico; sin embargo, varios nombres pueden estar asociado con el mismo tipo. Debido a esto, una instancia de ese elemento es indistinta. Por ejemplo, considere el siguiente fragmento de esquema que define un elemento en indistinto denominado MyChoice.

 <xsd:complexType name="MyChoice">
  <xsd:sequence>
  <xsd:choice minOccurs="0" maxOccurs="1">
  <xsd:element minOccurs="1" maxOccurs="1" name="ChoiceOne" type="xsd:string" />
  <xsd:element minOccurs="1" maxOccurs="1" name="ChoiceTwo" type="xsd:string" />
  </xsd:choice>
  </xsd:sequence>
 </xsd:complexType>

XmlChoiceIdentifierAttribute que permite asignar un valor de enumeración especial a cada instancia del miembro. Deberá crear la enumeración usted mismo o puede representarse por Herramienta de definición de esquema XML (Xsd.exe). El código de C# siguiente muestra cómo XmlChoiceIdentifierAttribute se aplica a un campo de Item ; la propiedad de MemberName identifica el campo que contiene la enumeración que se utiliza más a fondo para detectar la opción.

 public class Choices{
  [XmlChoiceIdentifier("ItemType")]
  [XmlChoiceIdentifier("ChoiceOne")]
  [XmlChoiceIdentifier("ChoiceTwo")]
  public string MyChoice;

  // Do not serialize this next field:
  [XmlIgnore]
  public ItemChoiceType ItemType;
 }
 // Do not include this enumeration in the XML schema.
 [XmlType(IncludeInSchema = false)]
 public enum ItemChoiceType{
  ChoiceOne,
  ChoiceTwo,
 }

Cuando este código existe, puede serializar y deserializar esta clase estableciendo el campo de ItemType a una enumeración adecuada. Por ejemplo, para serializar la clase de Choice , el código de C# se parece al siguiente.

 Choices mc = new Choices();
 mc.MyChoice = "Item Choice One";
 mc.ItemType = ItemChoiceType.ChoiceOne;

Al deserializar, el código de C# se parece al siguiente:

 MyChoice mc = (MyChoice) myXmlSerializer.Deserialize(myReader);
 if(mc.ItemType == ItemChoiceType.ChoiceOne)
  {
      // Handle choice one.
  }
 if(mc.ItemType == ItemChoiceType.ChoiceTwo)
  {
      // Handle choice two.
  }
 if(mc.ItemType != null)
  {
      throw CreateUnknownTypeException(mc.Item);
  }

Hay una segunda escenario cuando se utiliza XmlChoiceIdentifierAttribute . En el siguiente esquema, el miembro es un campo que devuelve una matriz de elementos (maxOccurs= " unbounded”). La matriz puede contener objetos de la primera opción (“D-a-t-a”), y la segunda opción (“MoreData”).

 <xsd:complexType name="MyChoice">
  <xsd:sequence>
  <xsd:choice minOccurs="0" maxOccurs="unbounded">
  <xsd:element minOccurs="1" maxOccurs="1" name="D-a-t-a" type="xsd:string" />
  <xsd:element minOccurs="1" maxOccurs="1" name="MoreData" type="xsd:string" />
  </xsd:choice>
  </xsd:sequence>
 </xsd:complexType>

La clase resultante utilice un campo para devolver una matriz de elementos. Para cada elemento de la matriz, enumeración correspondiente de ItemChoiceType también debe encontrar. Las enumeraciones coincidente se contienen en la matriz devuelta por el campo de ItemsElementName .

 public class MyChoice {
  [System.Xml.Serialization.XmlElementAttribute("D-a-t-a", typeof(string), IsNullable=false)]
  [System.Xml.Serialization.XmlElementAttribute("MoreData", typeof(string), IsNullable=false)]
  [System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemsElementName")]
  public string[] Items;
  [System.Xml.Serialization.XmlElementAttribute(IsNullable=false)]
  [System.Xml.Serialization.XmlIgnoreAttribute()]
  public ItemsChoiceType[] ItemsElementName;
 }
 [System.Xml.Serialization.XmlTypeAttribute(IncludeInSchema=false)]
 public enum ItemsChoiceType {
  [System.Xml.Serialization.XmlEnumAttribute("D-a-t-a")]
  Data,
  MoreData,
 }

Al deserializar un objeto que incluye un intervalo de opciones, use una estructura de control (como if… then… else estructura) para determinar cómo deserializar un valor determinado. En la estructura de control, compruebe el valor de enumeración y deserialice el valor en consecuencia.

El ejemplo siguiente serializa una clase denominada Choices que incluye dos campos, MyChoice y ManyChoices. XmlChoiceIdentifierAttribute se aplica a cada campo que especifique (mediante la propiedad de MemberName ) a otro miembro de clase que obtenga o establezca una enumeración que detecte el valor de miembro. El campo de MyChoice se puede establecer en un valor único, con un miembro de enumeración correspondiente encontrado en el campo de EnumType . El campo de ManyChoices devuelve una matriz de objetos. El campo de ChoiceArray devuelve una matriz de valores de enumeración. Para cada miembro de la matriz en el campo de ManyChoices , encuentra un miembro correspondiente en la matriz devuelta por el campo de ChoiceArray .


using System;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

public class Choices{
   // The MyChoice field can be set to any one of 
   // the types below. 
   [XmlChoiceIdentifier("EnumType")]
   [XmlElement("Word", typeof(string))]
   [XmlElement("Number", typeof(int))]
   [XmlElement("DecimalNumber", typeof(double))]
   public object MyChoice;

   // Don't serialize this field. The EnumType field
   // contains the enumeration value that corresponds
   // to the MyChoice field value.
   [XmlIgnore]
   public ItemChoiceType EnumType;

   // The ManyChoices field can contain an array
   // of choices. Each choice must be matched to
   // an array item in the ChoiceArray field.
   [XmlChoiceIdentifier("ChoiceArray")]
   [XmlElement("Item", typeof(string))]
   [XmlElement("Amount", typeof(int))]
   [XmlElement("Temp", typeof(double))]
   public object[] ManyChoices;

   // TheChoiceArray field contains the enumeration
   // values, one for each item in the ManyChoices array.
   [XmlIgnore]
   public MoreChoices[] ChoiceArray;
}

[XmlType(IncludeInSchema=false)]
public enum ItemChoiceType{
   None,
   Word, 
   Number,
   DecimalNumber
}

public enum MoreChoices{
   None,
   Item,
   Amount,
   Temp
}

public class Test{
   static void Main(){
      Test t = new Test();
      t.SerializeObject("Choices.xml");
      t.DeserializeObject("Choices.xml");
   }

   private void SerializeObject(string filename){
      XmlSerializer mySerializer = 
      new XmlSerializer(typeof(Choices));
      TextWriter writer = new StreamWriter(filename);
      Choices myChoices = new Choices();

      // Set the MyChoice field to a string. Set the
      // EnumType to Word.
      myChoices.MyChoice= "Book";
      myChoices.EnumType = ItemChoiceType.Word;

      // Populate an object array with three items, one
      // of each enumeration type. Set the array to the 
      // ManyChoices field.
      object[] strChoices = new object[]{"Food",  5, 98.6};
      myChoices.ManyChoices=strChoices;

      // For each item in the ManyChoices array, add an
      // enumeration value.
      MoreChoices[] itmChoices = new MoreChoices[]
      {MoreChoices.Item, 
      MoreChoices.Amount,
      MoreChoices.Temp};
      myChoices.ChoiceArray=itmChoices;

      mySerializer.Serialize(writer, myChoices);
      writer.Close();
   }

   private void DeserializeObject(string filename){
      XmlSerializer ser = new XmlSerializer(typeof(Choices));

      // A FileStream is needed to read the XML document.
      FileStream fs = new FileStream(filename, FileMode.Open);
      Choices myChoices = (Choices)
      ser.Deserialize(fs);
      fs.Close();

      // Disambiguate the MyChoice value using the enumeration.
      if(myChoices.EnumType == ItemChoiceType.Word){
      	   Console.WriteLine("Word: " +  
      	   	myChoices.MyChoice.ToString());
      	}
      else if(myChoices.EnumType == ItemChoiceType.Number){
      	   Console.WriteLine("Number: " +
      	   	myChoices.MyChoice.ToString());
      	}
      else if(myChoices.EnumType == ItemChoiceType.DecimalNumber){
      	   Console.WriteLine("DecimalNumber: " +
      	   	myChoices.MyChoice.ToString());
      	}

      // Disambiguate the ManyChoices values using the enumerations.
      for(int i = 0; i<myChoices.ManyChoices.Length; i++){
      if(myChoices.ChoiceArray[i] == MoreChoices.Item)
      	Console.WriteLine("Item: " + (string) myChoices.ManyChoices[i]);
      else if(myChoices.ChoiceArray[i] == MoreChoices.Amount)
      	Console.WriteLine("Amount: " + myChoices.ManyChoices[i].ToString());
      if(myChoices.ChoiceArray[i] == MoreChoices.Temp)
      	Console.WriteLine("Temp: " + (string) myChoices.ManyChoices[i].ToString());
      	}

   }
}


.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

.NET para aplicaciones de Windows Phone

Compatible con: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft