簡體   English   中英

在WCF中隱藏派生類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM