1

WCF サービスでクライアントから派生クラスを非表示にしたいと考えています。

例 -

[DataContract]
public class Base
{
    public int Id {get; set;}
}

public class Derived : Base
{         
    public string Name {get; set;}
}

私が次のような運用契約を結んでいるとしましょう

[OperationalContract]
Base GetData();

運用契約の実施

public Base GetData()
{
    Derived = new Derived {Id = 1, Name = "Foo" };
    return derived;
}

上記の例は機能しません。[KnownType(typeof(Derived)] を Base クラスに追加し、DataContract 属性を Derived クラスに追加すると、すべてが正常に機能するように見えますが、そうすると、クライアントに Derived クラスが表示されます。派生クラスをクライアントから隠すことは可能ですか?ありがとう

4

1 に答える 1

2

次のように、KnownType 属性を追加する代わりに、名前付き DataContracts を使用して同等性をハッキングしたい動作が得られると思います。

[DataContract(Name="Reply")]
public class Base
{
    [DataMember]
    public virtual int IntValue { get; set; }

}

[DataContract(Name = "Reply")]
public class Derived : Base
{

    public String StringProperty { get; set; }
}



Derived blah = new Derived { IntValue = 3, StringProperty = "blah" };
public Base SomeOperation()
{
     return blah;
}

これはあなたが望むことをしますか?また、DataContractSurrogates ( http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/14/wcf-extensibility-serialization-surrogates.aspx ) もご覧ください。 API の型を作成し、内部型をこの API 型に「ハック」の少ない方法で変換します。

于 2013-09-14T00:44:52.183 に答える