2010-12-15 97 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屬性到表面。