Exportar (0) Imprimir
Expandir todo

XmlElementAttribute (Clase)

Actualización: noviembre 2007

Indica que un campo público o una propiedad pública representa un elemento XML, cuando XmlSerializer serializa o deserializa el objeto que lo contiene.

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

[AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, AllowMultiple = true)]
public class XmlElementAttribute : Attribute
/** @attribute AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, AllowMultiple = true) */
public class XmlElementAttribute extends Attribute
public class XmlElementAttribute extends Attribute

El atributo XmlElementAttribute pertenece a una familia de atributos que controla cómo XmlSerializer serializa o deserializa un objeto. Para obtener una lista completa de atributos similares, vea Atributos que controlan la serialización XML.

Un documento XML suele contener elementos XML, cada uno de estos documentos se compone de tres partes: una etiqueta de apertura con los atributos posibles, una etiqueta de cierre y los datos incluidos entre las etiquetas. Las etiquetas XML pueden estar anidadas; es decir, los datos entre las etiquetas también pueden ser elementos XML. Esta capacidad que tiene un elemento de encerrar a otro, permite que el documento contenga varias jerarquías de datos. Un elemento XML también puede incluir atributos.

Aplique XmlElementAttribute a campos públicos o propiedades públicas de lectura/escritura para controlar las características de los elementos XML como, por ejemplo, el nombre de elemento y el espacio de nombres.

El XmlElementAttribute puede aplicarse varias veces a un campo de lectura/escritura que devuelva una matriz de objetos. El propósito de esta tarea es especificar (mediante la propiedad Type) los diferentes tipos que se pueden insertar en la matriz. Por ejemplo, la matriz en lenguaje C# que se muestra a continuación acepta tanto cadenas como enteros.

 public class Things{
    [XmlElement(DataType = typeof(string)),
    XmlElement(DataType = typeof(int))]
    public object[] StringsAndInts;
 }

Esto da como resultado código XML similar al que aparece a continuación.

 <Things>
    <string>Hello</string>
    <int>999</int>
    <string>World</string>
 </Things>

Observe que al aplicar XmlElementAttribute varias veces sin especificar un valor de la propiedad ElementName, los elementos se denominan después de los tipos de los objetos aceptables.

Si aplica XmlElementAttribute a un campo o una propiedad que devuelve una matriz, los elementos de la matriz se codifican como una secuencia de elementos XML.

En cambio, si no se aplica un objeto XmlElementAttribute a ese tipo de campo o propiedad, los elementos de la matriz se codifican como una secuencia de elementos, anidados bajo un elemento designado con el nombre del campo o de la propiedad. Utilice los atributos XmlArrayAttribute y XmlArrayItemAttribute para controlar cómo se serializa una matriz.

Se puede establecer la propiedad Type para especificar un tipo derivado del tipo de campo o propiedad original; es decir, el campo o la propiedad a la que se ha aplicado XmlElementAttribute.

Si un campo o una propiedad devuelve un ArrayList, se pueden aplicar varias instancias de XmlElementAttribute al miembro. Para cada instancia, establezca la propiedad Type en un tipo de objeto que puede insertarse en la matriz.

Para obtener más información sobre cómo utilizar los atributos, vea Extender metadatos mediante atributos.

hf00byt3.alert_note(es-es,VS.90).gifNota:

En el código, se puede utilizar la palabra XmlElement en lugar de XmlElementAttribute, que es más largo.

En el siguiente ejemplo, se serializa una clase denominada Group y se aplica XmlElementAttribute a varios de sus miembros. El campo denominado Employees devuelve una matriz de objetos Employee. En este caso, XmlElementAttribute especifica que el elemento XML resultante no estará anidado, siendo éste el comportamiento predeterminado de los elementos de una matriz.

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

public class Group
{
   /* Set the element name and namespace of the XML element.
   By applying an XmlElementAttribute to an array,  you instruct
   the XmlSerializer to serialize the array as a series of XML
   elements, instead of a nested set of elements. */

   [XmlElement(
   ElementName = "Members",
   Namespace = "http://www.cpandl.com")]
   public Employee[] Employees;

   [XmlElement(DataType = "double",
   ElementName = "Building")]
   public double GroupID;

   [XmlElement(DataType = "hexBinary")]
   public byte [] HexBytes;


   [XmlElement(DataType = "boolean")]
   public bool IsActive;

   [XmlElement(Type = typeof(Manager))]
   public Employee Manager;

   [XmlElement(typeof(int),
   ElementName = "ObjectNumber"),
   XmlElement(typeof(string),
   ElementName = "ObjectString")]
   public ArrayList ExtraInfo;
}   

public class Employee
{
   public string Name;
}

public class Manager:Employee{
   public int Level;
}

public class Run
{
    public static void Main()
    {
       Run test = new Run();
       test.SerializeObject("FirstDoc.xml");
       test.DeserializeObject("FirstDoc.xml");
    }


   public void SerializeObject(string filename)
   {
      // Create the XmlSerializer.
      XmlSerializer s = new XmlSerializer(typeof(Group));

      // To write the file, a TextWriter is required.
      TextWriter writer = new StreamWriter(filename);

      /* Create an instance of the group to serialize, and set
         its properties. */
      Group group = new Group();
      group.GroupID = 10.089f;
      group.IsActive = false;

      group.HexBytes = new byte[1]{Convert.ToByte(100)};

      Employee x = new Employee();
      Employee y = new Employee();

      x.Name = "Jack";
      y.Name = "Jill";

      group.Employees = new Employee[2]{x,y};

      Manager mgr = new Manager();
      mgr.Name = "Sara";
      mgr.Level = 4;
      group.Manager = mgr;

      /* Add a number and a string to the 
      ArrayList returned by the ExtraInfo property. */
      group.ExtraInfo = new ArrayList();
      group.ExtraInfo.Add(42);
      group.ExtraInfo.Add("Answer");

      // Serialize the object, and close the TextWriter.      
      s.Serialize(writer, group);
      writer.Close();
   }

   public void DeserializeObject(string filename)
   {
      FileStream fs = new FileStream(filename, FileMode.Open);
      XmlSerializer x = new XmlSerializer(typeof(Group));
      Group g = (Group) x.Deserialize(fs);
      Console.WriteLine(g.Manager.Name);
      Console.WriteLine(g.GroupID);
      Console.WriteLine(g.HexBytes[0]);
      foreach(Employee e in g.Employees)
      {
         Console.WriteLine(e.Name);
      }
   }
}



import System.*;
import System.Collections.*;
import System.IO.*;
import System.Xml.Serialization.*;

public class Group
{
    /* Set the element name and namespace of the XML element.
       By applying an XmlElementAttribute to an array,  you instruct
       the XmlSerializer to serialize the array as a series of XML
       elements, instead of a nested set of elements. */

    /** @attribute XmlElement(ElementName = "Members",
        Namespace = "http://www.cpandl.com")
     */
    public Employee employees[];   
    /** @attribute XmlElement(DataType = "double", ElementName = "Building")
     */
    public double groupID;   
    /** @attribute XmlElement(DataType = "hexBinary")
     */
    public ubyte hexBytes[];   
    /** @attribute XmlElement(DataType = "boolean")
     */
    public boolean isActive;   
    /** @attribute XmlElement(Type = Manager.class)
     */
    public Employee manager;   
    /** @attribute XmlElement(int.class, ElementName = "ObjectNumber")
        @attribute XmlElement(String.class, ElementName = "ObjectString")
     */
    public ArrayList extraInfo;
} //Group

public class Employee
{
    public String name;
} //Employee

public class Manager extends Employee
{
    public int level;
} //Manager

public class Run
{
    public static void main(String[] args)
    {
        Run test = new Run();
        test.SerializeObject("FirstDoc.xml");
        test.DeserializeObject("FirstDoc.xml");
    } //main

    public void SerializeObject(String fileName)
    {
        // Create the XmlSerializer.
        XmlSerializer s = new XmlSerializer(Group.class.ToType());

        // To write the file, a TextWriter is required.
        TextWriter writer = new StreamWriter(fileName);

        /* Create an instance of the group to serialize, and set
           its properties. */
        Group group = new Group();
        group.groupID = 10.089f;
        group.isActive = false;
        group.hexBytes = new ubyte[] { Convert.ToByte(100) };

        Employee x = new Employee();
        Employee y = new Employee();

        x.name = "Jack";
        y.name = "Jill";
        group.employees = new Employee[] { x, y };

        Manager mgr = new Manager();
        mgr.name = "Sara";
        mgr.level = 4;
        group.manager = mgr;

        /* Add a number and a string to the 
           ArrayList returned by the ExtraInfo property. */
        group.extraInfo = new ArrayList();
        group.extraInfo.Add((Int32)42);
        group.extraInfo.Add("Answer");

        // Serialize the object, and close the TextWriter.      
        s.Serialize(writer, group);
        writer.Close();
    } //SerializeObject

    public void DeserializeObject(String fileName)
    {
        FileStream fs = new FileStream(fileName, FileMode.Open);
        XmlSerializer x = new XmlSerializer(Group.class.ToType());
        Group g = (Group)x.Deserialize(fs);

        Console.WriteLine(g.manager.name);
        Console.WriteLine(g.groupID);
        Console.WriteLine(g.hexBytes.get_Item(0));
        for (int iCtr = 0; iCtr < g.employees.length; iCtr++) {
            Employee e = g.employees[iCtr];
            Console.WriteLine(e.name);
        }
    } //DeserializeObject
} //Run


System.Object
  System.Attribute
    System.Xml.Serialization.XmlElementAttribute

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.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC, Xbox 360

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0

XNA Framework

Compatible con: 2.0, 1.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft