2010-12-15 73 views
4

在WCF中,如何从未使用DataContractAttribute或SerializableAttribute标记的类继承并将其用作datacontract?如何从未在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的类型继承。

这有什么解决方法?

回答

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属性到表面。