Dado o seguinte 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>
E a seguinte classe:
public class User {
[XmlElement("id")]
public Int32 Id { get; set; }
[XmlElement("name")]
public String Name { get; set; }
}
É possível usar XmlSerializer
para desserializar o xml em um List<User>
? Em caso afirmativo, que tipo de atributos adicionais eu precisarei usar ou quais parâmetros adicionais eu preciso usar para construir a XmlSerializer
instância?
Uma matriz ( User[]
) seria aceitável, se um pouco menos preferível.
c#
serialization
xml-serialization
xml-deserialization
Daniel Schaffer
fonte
fonte
.Items
membro.Se você decorar a
User
classe com oXmlType
para corresponder à capitalização requerida:Então o
XmlRootAttribute
noXmlSerializer
ctor pode fornecer a raiz desejado e permitir a leitura directa para List <>:...
Crédito: com base na resposta de YK1 .
fonte
XmlSerializer
deve ser armazenado em cache e reutilizado estaticamente para evitar um vazamento grave de memória, consulte Vazamento de memória usando StreamReader e XmlSerializer para obter detalhes.Sim, ele serializará e desserializará uma lista <>. Apenas certifique-se de usar o atributo [XmlArray] em caso de dúvida.
Isso funciona com Serialize () e Deserialize ().
fonte
Eu acho que encontrei uma maneira melhor. Você não precisa colocar atributos em suas classes. Eu criei dois métodos para serialização e desserialização que tomam a lista genérica como parâmetro.
Dê uma olhada (funciona para mim):
Então você pode serializar a lista que quiser! Você não precisa especificar o tipo de lista todas as vezes.
fonte
List<MyClass>
o elemento do documento deve ser nomeadoArrayOfMyClass
.Sim, desserializa para List <>. Não é necessário mantê-lo em uma matriz e envolvê-lo / encapsular em uma lista.
Desserializando código,
fonte
Não tenho certeza sobre a Lista <T>, mas as matrizes certamente são possíveis. E um pouco de magia torna muito fácil chegar a uma lista novamente.
fonte
E se
Não é particularmente chique, mas deve funcionar.
fonte