Bonjour,
J'ai conscience de poser une question surement très classique, mais je n'ai pas trouvé de réponse ailleurs.
Ma question est : je dois sérializer des tableaux d'objets, ces objets sont de classes héritant d'une même classe de base.
Comment dois-je construire la sérialization de mon tableau ? Quelle est la norme ?
Trois solutions :
- Utiliser comme balise le nom de la classe de base et spécifier la classe des objets en utilisant l'attribut xsi:type
- Utiliser pour chaque élément le nom de la classe de l'objet
- Créer autant de tableaux que de type d'éléments
Illustrations des solutions :
XSD
La classe (C# mais peu importe) que je souhaite sérializer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <xs:complexType name="ClasseFille2"> <xs:complexContent> <xs:extension base="ClasseMere"> <xs:sequence> <xs:element name="libelle2" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="ClasseFille1"> <xs:complexContent> <xs:extension base="ClasseMere"> <xs:sequence> <xs:element name="libelle" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="ClasseMere"> <xs:sequence> <xs:element name="dateCreation" type="xs:dateTime" minOccurs="0"/> <xs:element name="id" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType>
Les trois solutions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public class Conteneur { public ClasseMere[] MonTableau {get; set;} }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <Conteneur> <MonTableau> <ClasseMere xsi:type="ClasseFille1"> ... </ClasseMere> <ClasseMere xsi:type="ClasseFille2"> ... </ClasseMere> <ClasseMere xsi:type="ClasseFille1"> ... </ClasseMere> <ClasseMere xsi:type="ClasseMere"> ... </ClasseMere> </MonTableau> </Conteneur>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <Conteneur> <MonTableau> <ClasseFille1> ... </ClasseFille1> <ClasseFille2> ... </ClasseFille2> <ClasseFille1> ... </ClasseFille1> <ClasseMere> ... </ClasseMere> </MonTableau> </Conteneur>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <Conteneur> <ClasseFille1> <ClasseFille1> ... </ClasseFille1> <ClasseFille1> ... </ClasseFille1> </ClasseFille1> <ClasseFille2> <ClasseFille2> ... </ClasseFille2> </ClasseFille2> <ClasseMere> <ClasseMere> ... </ClasseMere> </ClasseMere> </Conteneur>
Je vous remercie par avance.
Partager