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 :
  1. Utiliser comme balise le nom de la classe de base et spécifier la classe des objets en utilisant l'attribut xsi:type
  2. Utiliser pour chaque élément le nom de la classe de l'objet
  3. Créer autant de tableaux que de type d'éléments


Illustrations des solutions :
XSD
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>
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
public class Conteneur
    {
        public ClasseMere[] MonTableau {get; set;}
    }
Les trois solutions :
  1. 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>
  2. 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>
  3. 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.