Maison >développement back-end >C++ >Comment désérialiser XML dans une liste à l'aide de XmlSerializer ?

Comment désérialiser XML dans une liste à l'aide de XmlSerializer ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-13 07:59:57140parcourir

How to Deserialize XML into a List Using XmlSerializer?

XmlSerializer et List Désérialisation : un guide pratique

La classe XmlSerializer offre une méthode simple pour désérialiser les données XML en différents types de données, y compris des listes d'objets personnalisés. Ce guide présente deux approches pour y parvenir.

Méthode 1 : Utiliser une classe Wrapper

Pour désérialiser XML en List<User>, une classe wrapper est nécessaire pour servir d'élément racine dans la structure XML. Considérez la classe UserList :

<code class="language-csharp">[XmlRoot("user_list")]
public class UserList
{
    public UserList() { Items = new List<User>(); }
    [XmlElement("user")]
    public List<User> Items { get; set; }
}</code>

Cette classe encapsule une liste de User objets. L'attribut [XmlRoot("user_list")] désigne "user_list" comme élément racine dans le XML. L'attribut [XmlElement("user")] mappe chaque objet User à un élément "utilisateur".

Ensuite, définissez la User classe :

<code class="language-csharp">public class User
{
    [XmlElement("id")]
    public Int32 Id { get; set; }

    [XmlElement("name")]
    public String Name { get; set; }
}</code>

Enfin, utilisez XmlSerializer pour la désérialisation :

<code class="language-csharp">XmlSerializer serializer = new XmlSerializer(typeof(UserList));
UserList userList = (UserList)serializer.Deserialize(streamOrStringReader);</code>

Remplacez streamOrStringReader par votre objet Stream ou StringReader contenant les données XML.

Méthode 2 : Désérialisation directe des tableaux

Vous pouvez également intégrer la liste directement dans la classe User, simplifiant ainsi le processus :

<code class="language-csharp">[XmlRoot("user_list")]
public class User
{
    public User[] Items { get; set; }
}</code>

La désérialisation devient alors :

<code class="language-csharp">XmlSerializer serializer = new XmlSerializer(typeof(User));
User userArray = (User)serializer.Deserialize(streamOrStringReader);</code>

La propriété Items contient désormais un tableau d'objets User.

Choisir la bonne méthode

L'approche de classe wrapper (méthode 1) offre une plus grande flexibilité, tandis que la méthode de tableau direct (méthode 2) offre une solution plus concise. Le meilleur choix dépend de la structure spécifique de vos données XML et de vos préférences personnelles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn