2010-11-20 16 views

Respuesta

28

Aquí hay una descripción menos que en profundidad, pero creo que es un buen punto de partida.

XmlRootAttribute - Se utiliza para proporcionar información de esquema para la clase que va a ser el elemento raíz del gráfico de objetos que se está serializando. Esto solo se puede aplicar a clases, estructuras, enumeraciones, interfaces de valores de retorno.

XmlElementAttribute - Proporciona información de esquema para las propiedades de una clase que controla cómo se serializan como elementos secundarios. Este atributo solo se puede aplicar a campos (miembros de la variable de clase), propiedades, parámetros y valores devueltos.

Los dos primeros XmlRootAttribute y XmlElementAttribute se refieren al XmlSerializer. Mientras que el siguiente, es utilizado por los formateadores de tiempo de ejecución y no se aplica cuando se utiliza XmlSerialization.

SerializableAtttrible - Se utiliza para indicar que el tipo puede ser serializado por los formateadores en tiempo de ejecución como SoapFormatter o BinaryFormatter. Esto solo es necesario si necesita serializar el tipo utilizando uno de los formateadores y se puede aplicar a delegados, enumeraciones, estructuras y clases.

Aquí hay un ejemplo rápido que podría ayudar a aclarar lo anterior.

// This is the root of the address book data graph 
// but we want root written out using camel casing 
// so we use XmlRoot to instruct the XmlSerializer 
// to use the name 'addressBook' when reading/writing 
// the XML data 
[XmlRoot("addressBook")] 
public class AddressBook 
{ 
    // In this case a contact will represent the owner 
    // of the address book. So we deciced to instruct 
    // the serializer to write the contact details out 
    // as <owner> 
    [XmlElement("owner")] 
    public Contact Owner; 

    // Here we apply XmlElement to an array which will 
    // instruct the XmlSerializer to read/write the array 
    // items as direct child elements of the addressBook 
    // element. Each element will be in the form of 
    // <contact ... /> 
    [XmlElement("contact")] 
    public Contact[] Contacts; 
} 

public class Contact 
{ 
    // Here we instruct the serializer to treat FirstName 
    // as an xml element attribute rather than an element. 
    // We also provide an alternate name for the attribute. 
    [XmlAttribute("firstName")] 
    public string FirstName; 

    [XmlAttribute("lastName")] 
    public string LastName; 

    [XmlElement("tel1")] 
    public string PhoneNumber; 

    [XmlElement("email")] 
    public string EmailAddress; 
} 

Teniendo en cuenta lo anterior, una instancia de la libreta de direcciones en serie con un XmlSerializer daría XML con el siguiente formato

<addressBook> 
    <owner firstName="Chris" lastName="Taylor"> 
    <tel1>555-321343</tel1> 
    <email>[email protected]</email> 
    </owner> 
    <contact firstName="Natasha" lastName="Taylor"> 
    <tel1>555-321343</tel1> 
    <email>[email protected]</email> 
    </contact> 
    <contact firstName="Gideon" lastName="Becking"> 
    <tel1>555-123423</tel1> 
    <email>[email protected]</email> 
    </contact> 
</addressBook> 
+0

¿Puede usted decir cómo podemos añadir los Attribiutes de un xml que tiene una etiqueta de todos los contactos, dentro de la etiqueta de la libreta de direcciones? – Dhanashree

+2

@Dhanashree, ¿está pidiendo envolver los elementos de contacto en un elemento de contactos principal? Si es así, puede eliminar [XmlElement ("contacto")] de los 'contactos [] contactos', si desea controlar los nombres, puede reemplazar el atributo actual por [XmlArray ("contactos")], XmlArrayItem (" contacto ")] que controlará el nombre de la raíz y los elementos en la colección. –

+0

¡Gracias! Eso ayudó :) – Dhanashree

Cuestiones relacionadas