XmlSerializer et List
Peut-on XmlSerializer
désérialiser des données XML directement dans un List<T>
? Examinons cela avec un exemple de structure XML et une classe C# correspondante.
Exemple XML :
<code class="language-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></code>
Classe d'utilisateurs C# :
<code class="language-csharp">public class User { [XmlElement("id")] public Int32 Id { get; set; } [XmlElement("name")] public String Name { get; set; } }</code>
La désérialisation directe vers List<User>
n'est pas directement prise en charge par XmlSerializer
. Cependant, une solution de contournement simple permet d'y parvenir.
Solution : boucler la liste
La solution consiste à créer une classe wrapper qui contient le List<User>
:
<code class="language-csharp">using System; using System.Collections.Generic; using System.Xml.Serialization; [XmlRoot("user_list")] public class UserListWrapper { public UserListWrapper() { Users = new List<User>(); } [XmlElement("user")] public List<User> Users { get; set; } }</code>
En utilisant cette UserListWrapper
classe, la désérialisation devient simple. Le XmlSerializer
remplira la liste Users
dans le wrapper. Après la désérialisation, vous pouvez alors accéder au List<User>
depuis la propriété Users
du wrapper. Un tableau (User[]
) peut également être utilisé à la place de la liste dans la classe wrapper, selon vos préférences.
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!