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

上面的例子不起作用。如果我在 Base 类中添加 [KnownType(typeof(Derived)] 并将 DataContract 属性添加到 Derived 类,那么一切似乎都正常。但是如果我这样做,客户端将看到我想隐藏的 Derived 类。是可以对客户隐藏派生类吗?谢谢

4

1 回答 1

2

我想你会得到你想要使用命名 DataContracts 而不是添加 KnownType 属性的黑客等价行为,如下所示:

[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 ),这对 WCF 来说是一种奇特的方式支持 zimdanen 所说的 - 为你的 API 创建一个类型,并以一种不那么“hacky”的方式将你的内部类型转换为这个 API 类型。

于 2013-09-14T00:44:52.183 回答