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 XmlSerializerpara 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 XmlSerializerinstancia?
Una matriz ( User[]) sería aceptable, si es un poco menos preferible.
c#
serialization
xml-serialization
xml-deserialization
Daniel Schaffer
fuente
fuente

.Itemsmiembro.Si decora la
Userclase con elXmlTypepara que coincida con la capitalización requerida:Luego,
XmlRootAttributeen elXmlSerializerctor puede proporcionar la raíz deseada y permitir la lectura directa en la Lista <>:...
Crédito: basado en la respuesta de YK1 .
fuente
XmlSerializerdebe 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