我想在我的WCF服务中隐藏客户端的派生类 .
示例 -
[DataContract]
public class Base
{
public int Id {get; set;}
}
public class Derived : Base
{
public string Name {get; set;}
}
让我们说我的运营 Contract 就像
[OperationalContract]
Base GetData();
执行业务 Contract
public Base GetData()
{
Derived = new Derived {Id = 1, Name = "Foo" };
return derived;
}
上面的例子不起作用 . 如果我在Base类中添加[KnownType(typeof(Derived)],并将DataContract属性添加到Dervied类,那么一切似乎都能正常工作 . 但是如果我这样做,客户端将看到Derived类,我想隐藏它 . 是吗可以从客户端隐藏Derived类吗?谢谢
1 回答
我认为你会使用命名的DataContracts而不是添加KnownType属性来获得你想要黑客等效的行为,如下所示:
这样做你想要的吗?另请参阅DataContractSurrogates(http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/14/wcf-extensibility-serialization-surrogates.aspx),这些都是WCF支持zimdanen所说的一种奇特的方式 - 为您的API创建一个类型,并以较少的"hacky"方式将您的内部类型转换为此API类型 .