我想在我的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属性添加到Dervied类,那么一切似乎都能正常工作。但是如果我这样做,客户端将会看到Derived类,我想隐藏它。是吗可以从客户端隐藏Derived类吗?谢谢
答案 0 :(得分: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创建一个类型,并将您的内部类型转换为此类API,而不是“hacky” “方式。