隐藏WCF中的派生类

时间:2013-09-13 20:58:11

标签: c# wcf

我想在我的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类吗?谢谢

1 个答案:

答案 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” “方式。