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

Shy*_*yju 5 wcf inheritance serialization datacontract

在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;
   }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我发布服务时,它抛出了运行时错误,说明:

System.Runtime.Serialization.InvalidDataContractException:类型'EmailAttachment'无法继承未标记有DataContractAttribute或SerializableAttribute的类型。

有什么解决方法?

Chr*_*son 0

这取决于您希望数据合同是什么样子。不能使用包装器而不是派生类吗?就像是:

[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;
}
Run Code Online (Sandbox Code Playgroud)

如果您希望在数据协定中公开内部 System.Mail.Attachment 的任何状态,则可以添加 DataMember 属性来显示该状态。