2010-12-15 34 views
4

WCFでは、DataContractAttributeまたはSerializableAttributeでマークされていないクラスから継承し、それをdatacontractとして使用する方法はありますか。WCFでDataContractAttributeまたはSerializableAttributeでマークされていないクラスから継承する方法はありますか

例:私はSystem.Net.Mail.Attachmentから継承された「EmailAttachment」と呼ばれるカスタムクラスを持っている:

[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

データ契約がどのように表示されるかによって異なります。派生クラスではなくラッパーを使用できませんか?何かが似:あなたがデータコントラクトで公開するインナーSystem.Mail.Attachmentからどのような状態がある場合

[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; 
} 

、あなたはその表面するデータメンバーのプロパティを追加したいです。

関連する問題