2

次の簡単な例を考えてみましょう。

[DataContract("{0}Base")]
public class Base<T> where T : Entity<T>
{
    // Common methods & properties.  No WCF exposed properties
}

[DataContract]
public class Employee : Base<Employee>
{
    // WCF exposed properties
}

基本クラス Base には、WCF サービス コンシューマーにとって重要なプロパティはありませんが、WCF では、基本クラスに [DataContract] 属性で注釈を付けることも強制されます。これは基本的に、プロパティのない空のクラスとしてサービス クライアントに表示されEmployee : EmployeeBaseます。EmployeeBase

Base<T>この方法でクラスをサービスに公開したくないので、どのようなオプションがありますか?

  1. Employee クラスの DTO - この複雑さを加えたくない
  2. Employee のデータ コントラクトが から継承していることを公開しないように、DataContract 階層を "フラット化" しBase<T>ます。これは可能ですか?どのように?
  3. 他の解決策は?

ありがとう。

4

1 に答える 1

3

階層内の各クラスは、シリアライズ可能/DataContract でなければなりません。階層を公開したくない場合は、DTO を使用するか、Employee クラスに IDataContractSuroggate を実装してみてください。

于 2010-08-17T09:08:37.383 に答える