Inheritance 如何从WCF中未标记DataContractAttribute或SerializableAttribute的类继承?

Inheritance 如何从WCF中未标记DataContractAttribute或SerializableAttribute的类继承?,inheritance,serialization,wcf,datacontract,Inheritance,Serialization,Wcf,Datacontract,在WCF中,如何从未标记为DataContractAttribute或SerializableAttribute的类继承并将其用作datacontract 例如:我有一个名为“EmailAttachment”的自定义类,它是从System.Net.Mail.Attachment继承的: [DataContract] public class EmailAttachment : Attachment { [DataMember] public string AttachmentURL

在WCF中,如何从未标记为DataContractAttribute或SerializableAttribute的类继承并将其用作datacontract

例如:我有一个名为“EmailAttachment”的自定义类,它是从System.Net.Mail.Attachment继承的:

[DataContract]
public class EmailAttachment : Attachment
{
   [DataMember]
   public string AttachmentURL
   {
       set;
       get;
   }
   [DataMember]
   public string DisplayName
   {
       set;
       get;
   }
}
但当我发布服务时,它会抛出一个运行时错误,表示:

System.Runtime.Serialization.InvalidDataContractException:类型“EmailAttachment”无法从未标记为DataContractAttribute或SerializableAttribute的类型继承


解决方法是什么?

这取决于您希望数据契约的外观。您不能使用包装器而不是派生类吗?比如:

[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;
}
如果要在数据协定中公开内部System.Mail.Attachment中的任何状态,则应添加DataMember属性以显示该状态