2011-05-31 32 views
0

基本上,如果我有以下幾點:WCF - 將屬性標記爲忽略的任何方式?

[DataContract] 
public class Foo 
{ 
    [MyCustomAttribute(...)] 
    [DataMember(IsRequired = true)] 
    public int bar { get; set; } 
} 

我怎樣才能得到它,這樣當用戶生成使用類MyCustomAttribute被忽略「添加服務引用...」

基本上,我不不想在客戶端生成的代碼的屬性上設置該屬性。請記住,我還是希望物業本身展現出來,但基本上,客戶端應該是這樣的......

[DataContract] 
public class Foo 
{ 
    [DataMember(IsRequired = true)] 
    public int bar { get; set; } 
} 
+2

這應該是「添加服務引用」代理生成器的默認行爲。您是否嘗試添加服務參考並獲得您的自定義屬性? – 2011-05-31 17:29:20

+0

我沒有嘗試,我查看了Reference.cs文件,發現它繼承了DataMember(IsRequired = true)等項目,並認爲它包含了屬性。我想那個屬性是重建的,沒有結束。 – michael 2011-05-31 19:02:41

回答

-1

一種可能性是創建一個接口和屬性放置到接口的方法。

你可以查詢接口而不是具體的類,但是WCF只會看到該類的具體實現。

你可以說:

[DataContract] 
public class Foo : IFoo 
{ 
    [DataMember(IsRequired = true)] 
    public int bar { get; set; } 
} 

public interface IFoo 
{ 
    [MyCustomAttribute(...)] 
    int bar { get; set; } 
} 
+0

我不完全理解這個... – michael 2011-05-31 17:29:26

1

[DataMember]是一部分序列化引擎,因此需要。您在代理中看到的原因是代理使用與服務相同的DataContractSerializer。當IsRequired設置爲true時,代理可以確定發送客戶端是否可行(如果設置了所需值)。

從WSDL中可以確定是否需要屬性,因此DataMemberAttribute是基於WSDL文件設置的;而不是服務的源代碼。代理默認由網絡上的服務描述完全生成。而作爲其他答案提及你一定會而不是得到你自己的自定義屬性複製到代理。