Beetje vreemde titel, maar het komt hierop neer: ik wil descendants van een abstracte class serializen naar XML, zonder dat dat <Base xs:type="Descendant"> nodes oplevert. Ik heb de volgende code (gesimplificeerd):
Ik zou hieruit verwachten dat de deserializer de volgende XML wel slikt:
Maar helaas, in plaats van <Descendant1/> moet hij per se <Item xs:type="Descendant1"/> hebben. Ondanks het feit dat ik met [XmlRoot] toch al aangeef hoe het element moet gaan heten... Nou kun je zeggen dat dat door [XmlArrayItem] komt, maar als ik die weglaat, blijven die xs:type attributen verplicht.
De vraag is dus hoe ik kan aangeven van de *naam van het element* aangeeft welke class het item in de array moet worden, ipv het xs:type attribuut...
Heeft iemand enige ideeën of aanwijzingen hoe ik de XML krijg zoals ik em wil?
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| [Serializable] public class Container { [XmlArray("Items")] [XmlArrayItem("Item")] public BaseClass[] Items; } public abstract class BaseClass { } [XmlRoot("Descendant1")] public class Descendant1: BaseClass { } [XmlRoot("Descendant2")] public class Descendant1: BaseClass { } |
Ik zou hieruit verwachten dat de deserializer de volgende XML wel slikt:
XML:
1
2
3
4
5
6
7
| <Container> <Items> <Descendant1 /> <Descendant1 /> <Descendant2 /> </Items> </Container> |
Maar helaas, in plaats van <Descendant1/> moet hij per se <Item xs:type="Descendant1"/> hebben. Ondanks het feit dat ik met [XmlRoot] toch al aangeef hoe het element moet gaan heten... Nou kun je zeggen dat dat door [XmlArrayItem] komt, maar als ik die weglaat, blijven die xs:type attributen verplicht.
De vraag is dus hoe ik kan aangeven van de *naam van het element* aangeeft welke class het item in de array moet worden, ipv het xs:type attribuut...
Heeft iemand enige ideeën of aanwijzingen hoe ik de XML krijg zoals ik em wil?
日本!🎌