2010-12-15 123 views
4

Dans WCF, comment hériter d'une classe qui n'est pas marquée avec DataContractAttribute ou SerializableAttribute et l'utiliser comme contrat de données?Comment hériter d'une classe qui n'est pas marquée avec DataContractAttribute ou SerializableAttribute dans WCF?

Ex: J'ai une classe personnalisée appelée « EmailAttachment » que je hérité de System.Net.Mail.Attachment:

[DataContract] 
public class EmailAttachment : Attachment 
{ 
    [DataMember] 
    public string AttachmentURL 
    { 
     set; 
     get; 
    } 
    [DataMember] 
    public string DisplayName 
    { 
     set; 
     get; 
    } 
} 

Mais quand je public au service, il est lancer une erreur d'exécution en disant que:

System.Runtime.Serialization.InvalidDataContractException: Le type 'EmailAttachment' ne peut pas hériter d'un type qui n'est pas marqué avec DataContractAttribute ou SerializableAttribute.

Quelle est la solution de contournement pour cela?

Répondre

0

Cela dépend de ce à quoi vous voulez que votre contrat de données ressemble. Vous ne pouvez pas utiliser un wrapper plutôt qu'une classe dérivée? Quelque chose comme:

[DataContract] 
public class EmailAttachment 
{ 
    public EmailAttachment(){} 

    internal EmailAttachment(Attachment inner) {_attachment = inner;} 

    [DataMember] 
    public string AttachmentURL 
    { 
     set; 
     get; 
    } 
    [DataMember] 
    public string DisplayName 
    { 
     set; 
     get; 
    } 

    private Attachment _attachment; 
} 

En cas d'état de la System.Mail.Attachment intérieure que vous voulez exposer dans le contrat de données, vous auriez alors ajouter DataMember propriétés à surface.