2009-06-13 61 views
2

假設我有一個方法,並且返回類型是枚舉,我的問題是應該將枚舉聲明爲DataContract還是不是?WCF中的DataContract問題

樣品一樣,在樣品中,OrderStatus是一個枚舉數據類型,

OrderStatus Poll(string queryID); 

我應該聲明OrderStatus枚舉類型作爲DataContract?

由於事先 喬治

+0

(回覆評論) – 2009-06-14 22:29:34

回答

1

我沒有必要前回答這個問題,但似乎你可以通過創建一個簡單的小測試項目,並試圖左右逢源自己找到答案。選擇能夠爲您提供所需結果的方法。 (你的帖子並沒有真正指出目標,所以很難回答這個問題。)

+0

我的目標是,它是否是正確的申報OrderStatus爲Datacontract。我已經測試過似乎沒有區別聲明或不聲明,請隨時糾正我,如果我錯了。 – George2 2009-06-13 17:39:10

+0

那聽起來像是一個答案。如果兩種情況都符合你的目標,那麼你不需要添加額外的代碼。 – 2009-06-16 17:03:07

4

我不認爲你需要將OrderStatus聲明爲DataContract。根據我的經驗,如果Enums被另一個屬於合同一部分的類使用,它將自動被合約化。

此外,存在一個[EnumMember]屬性,可讓您選擇要通過合同暴露哪些枚舉值,如果因爲某些原因不想公開所有枚舉值。

+0

酷!關於「如果Enum被另一個屬於合同一部分的類使用,它們會自動合同化。」 - 我已經從客戶端代理代碼進行測試,這是事實。但是我還沒有找到任何提到這個的WCF正式文件,這就是我來這裏問的原因。你有什麼好的文件可以分享嗎? – George2 2009-06-13 17:54:15

4

你需要添加[EnumMember]等,以枚舉的唯一情況是如果:

  • 你不希望他們都露出(參照Pwninstein的答案)
  • 要更改的文本出於兼容性原因(設置爲Value)。

MSDN有一個後者的例子。

3

如果您關心使用正確的xsd命名空間發佈您的wsdl,那麼您只能使用DataContract屬性來爲枚舉執行此操作。

例如

[Datacontract(Namespace="http://company/xsd/service/2009/07/03"] 
public enum Status 
{ 
[EnumMember] 
ERROR = 1, 
[EnumMember] 
GOOD = 2, 
} 

否則在wsdl中使用默認命名空間。對於企業web服務,您可能希望具有適當的命名空間和版本控制wsdl模式。同樣使用EnumMember屬性,您可以選擇不發佈上面提到的所有枚舉值。

1

當你在Pwninstein的回答中要求提供一個文檔的評論時,我在這裏寫了postig。

http://msdn.microsoft.com/en-us/library/aa347875.aspx

它說(在簡單枚舉部分):

還可以序列枚舉類型到的DataContractAttribute屬性還沒有被應用。除了每個成員(沒有應用NonSerializedAttribute屬性)被視爲應用了EnumMemberAttribute屬性之外,這些枚舉類型的處理方式與前面所述完全相同。

希望它能幫助:d