¿Cuál es la diferencia entre usar XMLRoot/XMLElement y usar atributos Serializable()? ¿cómo sé cuándo usar cada uno?Diferencia entre el uso de XMLRoot/XMLElement y el uso de atributos Serializable() (en C#)
Respuesta
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>
- 1. ¿hay alguna diferencia entre [Serializable] y [Serializable()] en C#?
- 2. ¿Es caro el uso de atributos en .Net (C#)?
- 3. Diferencia entre el uso de Trace y TraceSource
- 4. Diferencia en Clojure entre uso y requiere
- 5. ¿Cuál es la diferencia entre el casting y el uso de "como" en C#?
- 6. El uso de atributos de Documentación en C#
- 7. Diferencia entre los atributos de propiedad en el objetivo-c
- 8. ¿Cuál es la diferencia entre scala @Serializable y Java Serializable?
- 9. diferencia entre el atributo DataContract y el atributo Serializable en .net
- 10. Uso de atributos ... INotifyPropertyChanged
- 11. ¿Existe una diferencia de rendimiento entre el uso de 20 jarras y el uso de una sola reembalaje?
- 12. Serializable, clonable y uso de memoria en Java
- 13. La diferencia entre el tipo de fundición y el uso de std :: move()?
- 14. ¿Cuál es la diferencia entre el formato .ipa y .app en el uso de iphone?
- 15. El uso de IsAssignableFrom y "es" palabra clave en C#
- 16. Diferencia de uso de memoria Java entre Linux y Windows
- 17. Diferencia en el uso de java.util.logging y log4j Loggers
- 18. ¿Hay alguna diferencia en el uso de Context.getText y Context.getResources.getText?
- 19. ¿Cuál es la diferencia entre el encasillamiento normal y el uso de “palabras clave como”
- 20. Cualquier diferencia entre File.ReadAllText() y el uso de un StreamReader para leer el contenido del archivo?
- 21. diferencia entre el uso de Throwable y Excepción en un intento de captura
- 22. Uso de variables dentro de Atributos en C#
- 23. Diferencia entre el uso de comillas dobles y comillas en python
- 24. Uso en el mundo real de atributos .NET personalizados
- 25. Diferencia entre el uso de punteros de caracteres y matrices de caracteres
- 26. Diferencia entre el uso del ID de frijol y el nombre en el archivo de configuración de Spring
- 27. diferencia resurrección en el uso de inicializador de objeto
- 28. Uso de UTF en el código de C++
- 29. el establecimiento de atributos de uso de claves con makecert
- 30. ¿Cuál es la diferencia entre _url y _PATH durante el uso de las rutas de carriles
¿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
@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. –
¡Gracias! Eso ayudó :) – Dhanashree