[英]Hiding derived class in 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;
}
上面的示例不起作用。 如果我在基類中添加[KnownType(typeof(Derived)],並向Dervied類添加DataContract屬性,那么一切似乎都正常,但是如果我這樣做,客戶端將看到Derived類,我想隱藏它。可以向客戶端隱藏派生類?謝謝
我認為您將使用命名的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類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.