【问题标题】:How to inherit from a class which is not marked with DataContractAttribute or SerializableAttribute in WCF?如何从 WCF 中未使用 DataContractAttribute 或 SerializableAttribute 标记的类继承?
【发布时间】:2011-05-26 03:12:18
【问题描述】:

在 WCF 中,如何从没有标记 DataContractAttribute 或 SerializableAttribute 的类继承并将其用作数据契约?

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

解决方法是什么?

【问题讨论】:

    标签: inheritance serialization wcf datacontract


    【解决方案1】:

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

    [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 属性以显示该状态。

    【讨论】:

      猜你喜欢
      • 2013-04-17
      • 2013-08-29
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      相关资源
      最近更新 更多