Je semble avoir un problème avec l'extrait de code suivant en ce que, quand je viens de spécifier ce que l'élément est (par exemple CashInHand), le type CashInHandPayment réel n'est pas disponible parce qu'il n'a pas J'ai été transposé lorsque j'ai généré la classe proxy (très probablement parce qu'elle ne lit pas dans XmlElementAttributes).Force WCF pour sérialiser la classe inutilisée
Existe-t-il un moyen de forcer la sérialisation des classes telles que AccountPayment, CashInHandPayment et CCPayment dans la classe proxy?
[DataContract]
public class Payment
{
[XmlElementAttribute("Account", typeof(AccountPayment))]
[XmlElementAttribute("CashInHand", typeof(CashInHandPayment))]
[XmlElementAttribute("CreditCard", typeof(CCPayment))]
[XmlChoiceIdentifierAttribute("ItemElementName")]
[DataMember]
public object Item { get; set; }
}
[DataContract]
public enum ItemElementName
{
[EnumMember]
Account,
[EnumMember]
CashInHand,
[EnumMember]
CreditCard
}
//This class will not be in the generated proxy class
[DataContract]
public class AccountPayment
{
[DataMember]
public double Amount { get; set; }
}
//classes for CashInHandPayment and CCPayment also created, but not shown.
Pardonnez-moi si serialize 'est pas le bon terme à utiliser, si vous lisez la question et de constater que ce n'est pas, s'il vous plaît changer en conséquence!
Mise à jour - réponse communiquée par Simon Svensson:
[KnownType(typeof(AccountPayment))]
[KnownType(typeof(CashInHandPayment))]
[KnownType(typeof(CCPayment))]
[DataContract]
public class Payment
{
[XmlElementAttribute("Account", typeof(AccountPayment))]
[XmlElementAttribute("CashInHand", typeof(CashInHandPayment))]
[XmlElementAttribute("CreditCard", typeof(CCPayment))]
[XmlChoiceIdentifierAttribute("ItemElementName")]
[DataMember]
public object Item { get; set; }
}
Un grand merci, Simon!
Bonjour Dan :), Simon semble avoir la bonne idée ci-dessous. L'attribut KnownType signifierait que votre type de paiement sera résolu car il est désérialisé. –
Bonjour, Mark! J'espère que vous allez bien! Oui, KnownType est quelque chose que j'ai oublié. Il doit être appliqué non pas à la classe elle-même, mais à toutes les classes qui l'utilisent, ce qui me semble un peu en arrière! –