Serialisation XML : comment sérialiser sous des noms d'éléments différent
Bonjour,
J'ai essayé de trouver un intitulé de post "explicite". Je ne le trouve pas clair mais je ne sais pas comment le dire "rapidement".
Bref,
Je dois générer un fichier XML basé sur un XSD. Jusque là rien d'anormal.
Je m'appuie souvent sur le "tuto" de Thomas Levesque sur la sérialisation XML mais la je ne trouve pas de solution.
Voici ce qui me pose problème:
Code:
1 2 3 4 5 6 7 8 9
| <xs:complexType name="Period_Type">
<xs:sequence>
<xs:element name="Year" type="enoss:Year_Type"/>
<xs:choice>
<xs:element name="Quarter" type="Quarter_Type"/>
<xs:element name="Month" type="Month_Type"/>
</xs:choice>
</xs:sequence>
</xs:complexType> |
Ou Quarter_Type et Month_Type sont des énumérations que voici:
Code:
1 2 3 4 5 6 7 8
| <xs:simpleType name="Quarter_Type">
<xs:restriction base="xs:int">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
</xs:restriction>
</xs:simpleType> |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <xs:simpleType name="Month_Type">
<xs:restriction base="xs:string">
<xs:enumeration value="01"/>
<xs:enumeration value="02"/>
<xs:enumeration value="03"/>
<xs:enumeration value="04"/>
<xs:enumeration value="05"/>
<xs:enumeration value="06"/>
<xs:enumeration value="07"/>
<xs:enumeration value="08"/>
<xs:enumeration value="09"/>
<xs:enumeration value="10"/>
<xs:enumeration value="11"/>
<xs:enumeration value="12"/>
</xs:restriction>
</xs:simpleType> |
Ceci doit donner soit ceci:
Code:
1 2 3 4
| <Period>
<Year>2022</Year>
<Quarter>2</Quarter>
</Period> |
Soit ceci:
Code:
1 2 3 4
| <Period>
<Year>2022</Year>
<Month>02</Month>
</Period> |
Je voulais partir vers un classe abstraite telle que ceci:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public abstract class AbstractPeriodKind
{
}
public class QuarterPeriodKind:AbstractPeriodKind
{
public Quarter_Type Quarter //Désolé pour l'absence des get set sinon je ne pouvais pas créer la discussion
}
public class MonthPeriodKind:AbstractPeriodKind
{
public Month_Type Month //Désolé pour l'absence des get set sinon je ne pouvais pas créer la discussion
} |
Que j'utilisais dans la classe de Period
Code:
1 2 3 4 5 6 7 8
| public class Period
{
public int Year //Désolé pour l'absence des get set sinon je ne pouvais pas créer la discussion
[XmlElement("Month", typeof(MonthPeriodKind))]
[XmlElement("Quarter", typeof(QuarterPeriodKind))]
public AbstractPeriodKind PeriodKind //Désolé pour l'absence des get set sinon je ne pouvais pas créer la discussion
} |
Mais à la sérialisation cela ne donne pas le résultat attendu puisque les éléments étaient doublés et imbriqués.
Code:
1 2 3 4 5 6
| <Period>
<Year>2022</Year>
<Quarter>
<Quarter>2</Quarter>
</Quarter>
</Period> |
Je ne vois pas trop comment écrire une valeur directement dans la balise "conteneur".
Comment feriez-vous ce genre de sérialisation?
Merci d'avance pour votre aide.