Dado el siguiente XML:
<?xml version="1.0"?>
<user_list>
<user>
<id>1</id>
<name>Joe</name>
</user>
<user>
<id>2</id>
<name>John</name>
</user>
</user_list>
Y la siguiente clase:
public class User {
[XmlElement("id")]
public Int32 Id { get; set; }
[XmlElement("name")]
public String Name { get; set; }
}
¿Es posible usar XmlSerializer
para deserializar el xml en a List<User>
? Si es así, ¿qué tipo de atributos adicionales necesitaré usar, o qué parámetros adicionales necesito usar para construir la XmlSerializer
instancia?
Una matriz ( User[]
) sería aceptable, si es un poco menos preferible.
c#
serialization
xml-serialization
xml-deserialization
Daniel Schaffer
fuente
fuente
.Items
miembro.Si decora la
User
clase con elXmlType
para que coincida con la capitalización requerida:Luego,
XmlRootAttribute
en elXmlSerializer
ctor puede proporcionar la raíz deseada y permitir la lectura directa en la Lista <>:...
Crédito: basado en la respuesta de YK1 .
fuente
XmlSerializer
debe almacenarse en caché de forma estática y reutilizarse para evitar una pérdida grave de memoria, consulte Fuga de memoria con StreamReader y XmlSerializer para obtener más información.Sí, serializará y deserializará una Lista <>. Solo asegúrese de usar el atributo [XmlArray] si tiene dudas.
Esto funciona con Serialize () y Deserialize ().
fuente
Creo que he encontrado una mejor manera. No tienes que poner atributos en tus clases. He hecho dos métodos de serialización y deserialización que toman la lista genérica como parámetro.
Echa un vistazo (funciona para mí):
¡Para que puedas serializar la lista que quieras! No necesita especificar el tipo de lista cada vez.
fuente
List<MyClass>
el elemento del documento debe nombrarseArrayOfMyClass
.Sí, se deserializa a List <>. No es necesario mantenerlo en una matriz y envolverlo / encapsularlo en una lista.
Código deserializador,
fuente
No estoy seguro acerca de List <T> pero las matrices son ciertamente factibles. Y un poco de magia hace que sea realmente fácil volver a una Lista.
fuente
Qué tal si
No es particularmente elegante, pero debería funcionar.
fuente