2011-12-28 8 views
0

従業員のDTO、 (私はサービス参照を追加するときに、組織クラス/メンバではないはずです)を公開すると、私の基底クラスとそれがメンバーになるのを避けることができます。WCF DataContract Baseクラスを隠す

[Serializable] 
    public abstract class Organization 
    { 
     public string Id{ get; set; } 
     public string SSN{ get; set; } 
    } 

    [DataContract][Serializable] 
    public class Employee :Organization 
    { 
     [DataMember] 
     public string FirstName { get; set; } 
     [DataMember] 
     public string LastName { get; set; } 
    } 

答えて

3

はこれを行うには、インタフェースに出Employee契約を分離し、あなたのサービスを通じて、それを公開する必要があります。

[Serializable] 
public abstract class Organization 
{ 
    public string Id { get; set; } 
    public string SSN { get; set; } 
} 

[DataContract] 
public interface IEmployee 
{ 
    [DataMember] 
    string FirstName { get; set; } 
    [DataMember] 
    string LastName { get; set; } 
} 

[Serializable] 
public class Employee : Organization, IEmployee 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

IEmployeeを返すようにあなたのサービスを定義し、単に具体的なEmployeeインスタンスを返します。

+0

クラスを繰り返すことは唯一の方法ですか? –

+0

あなたはクラスを繰り返さずに、インターフェイスを使ってサービスによって提供されるものを正確に定義しています。はい、似ていますが、全く異なる概念です。 –

+0

@AdamMaras - あなたはそれの固体実装を定義しようとしていない場合はなぜ 'IEmployee'を定義するのは難しいですか? –

0

両方のクラスから[Serializable]属性を削除しても問題ありません。 [DataContract]属性を使用すると、プロキシの作成時に[DataMember]属性を持つプロパティ/ filedsのみが使用可能になります。

+0

しかし、私はビュー状態でそれを永続化するために私のクラスを直列化する必要があります –

関連する問題