Gegeben eine (erfundene) Basisklasse und eine Subklasse, die wir via WCF mit dem XmlSerializer serialisieren wollen. Wir dekorieren eine Sammlung (die Antwort-Klasse) gemäß dem Artikel:XmlSerializer + Polymorphism
http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute.aspx (siehe Bemerkungen Abschnitt).
Problem ist, dass, obwohl die korrekte WSDL erzeugt zu werden scheint, SvcUtil eine Klassendatei erzeugt, wo die GetUserResponse Klasse eine Eigenschaft namens Elemente enthält. Hat das mit der Anwendung von [XmlElement] auf ein Array zu tun? Das XmlArray-Element verfügt zwar nicht über eine Type-Eigenschaft.
Vielen Dank im Voraus.
[Serializable]
[XmlType]
public class UserBase
{
public int Id {get;set;}
}
[Serializable]
[XmlType]
public class BasicUser : UserBase
{
public string UserName {get;set;}
}
[Serializable]
[XmlType]
public class SuperUser : UserBase
{
public string UserName {get;set;}
public bool SpecialLevel {get;set;}
}
[Serializable]
[XmlType]
public class GetUserResponse
{
[XmlElement("Users", typeof(User)), XmlElement("SuperUsers", typeof(SuperUser))]
public List<UserBase> Users {get;set;}
}
Warum benötigen Sie den XmlSerializer? Warum nicht einfach den Data Contract Serializer verwenden, der schneller und flexibler ist? –
btw, '[Serializable]' fügt hier nichts hinzu, es sei denn, Sie verwenden auch 'BinaryFormatter' irgendwo. –
@John - Danke Kumpel - wir haben nur 100000000 Stunden unnötige Verschlimmerung vom XmlSerializer erlebt. Es wird nicht von der Wahl verwendet. Es gibt Interop-Bedenken (d. H. DataContractSerializer ist tatsächlich * weniger * flexibel an den Stellen, die wir brauchen). – 6footunder