Compte tenu du XML suivant:
<?xml version="1.0"?>
<user_list>
<user>
<id>1</id>
<name>Joe</name>
</user>
<user>
<id>2</id>
<name>John</name>
</user>
</user_list>
Et la classe suivante:
public class User {
[XmlElement("id")]
public Int32 Id { get; set; }
[XmlElement("name")]
public String Name { get; set; }
}
Est-il possible d'utiliser XmlSerializer
pour désérialiser le XML en un List<User>
? Si tel est le cas, quel type d'attributs supplémentaires dois-je utiliser ou quels paramètres supplémentaires dois-je utiliser pour construire l' XmlSerializer
instance?
Un tableau ( User[]
) serait acceptable, mais un peu moins préférable.
c#
serialization
xml-serialization
xml-deserialization
Daniel Schaffer
la source
la source
.Items
membre.Si vous décorez la
User
classe avec leXmlType
pour correspondre à la capitalisation requise:Ensuite, le
XmlRootAttribute
sur leXmlSerializer
ctor peut fournir la racine souhaitée et permettre une lecture directe dans List <>:...
Crédit: basé sur la réponse de YK1 .
la source
XmlSerializer
doit être mis en cache statiquement et réutilisé pour éviter une fuite de mémoire grave, consultez Fuite de mémoire à l'aide de StreamReader et XmlSerializer pour plus de détails.Oui, il sérialisera et désérialisera un List <>. Assurez-vous simplement d'utiliser l'attribut [XmlArray] en cas de doute.
Cela fonctionne avec Serialize () et Deserialize ().
la source
Je pense avoir trouvé un meilleur moyen. Vous n'êtes pas obligé de mettre des attributs dans vos classes. J'ai créé deux méthodes pour la sérialisation et la désérialisation qui prennent une liste générique comme paramètre.
Jetez un œil (cela fonctionne pour moi):
Vous pouvez donc sérialiser la liste que vous voulez! Vous n'avez pas besoin de spécifier le type de liste à chaque fois.
la source
List<MyClass>
l'élément document devrait être nomméArrayOfMyClass
.Oui, il se désérialise en List <>. Pas besoin de le conserver dans un tableau et de l'envelopper / l'encapsuler dans une liste.
Code de désérialisation,
la source
Je ne suis pas sûr de List <T> mais les tableaux sont certainement faisables. Et un peu de magie rend très facile d'accéder à nouveau à une liste.
la source
Que diriez-vous
Pas particulièrement sophistiqué mais cela devrait fonctionner.
la source