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

时间:2010-12-15 19:23:39

标签: inheritance serialization wcf datacontract

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

Ex:我有一个名为“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标记的类型。

这是什么解决方法?

1 个答案:

答案 0 :(得分: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;
}

如果要在数据协定中公开内部System.Mail.Attachment中的任何状态,则可以将DataMember属性添加到表面。