假設我有一個方法,並且返回類型是枚舉,我的問題是應該將枚舉聲明爲DataContract還是不是?WCF中的DataContract問題
樣品一樣,在樣品中,OrderStatus是一個枚舉數據類型,
OrderStatus Poll(string queryID);
我應該聲明OrderStatus枚舉類型作爲DataContract?
由於事先 喬治
假設我有一個方法,並且返回類型是枚舉,我的問題是應該將枚舉聲明爲DataContract還是不是?WCF中的DataContract問題
樣品一樣,在樣品中,OrderStatus是一個枚舉數據類型,
OrderStatus Poll(string queryID);
我應該聲明OrderStatus枚舉類型作爲DataContract?
由於事先 喬治
我沒有必要前回答這個問題,但似乎你可以通過創建一個簡單的小測試項目,並試圖左右逢源自己找到答案。選擇能夠爲您提供所需結果的方法。 (你的帖子並沒有真正指出目標,所以很難回答這個問題。)
我的目標是,它是否是正確的申報OrderStatus爲Datacontract。我已經測試過似乎沒有區別聲明或不聲明,請隨時糾正我,如果我錯了。 – George2 2009-06-13 17:39:10
那聽起來像是一個答案。如果兩種情況都符合你的目標,那麼你不需要添加額外的代碼。 – 2009-06-16 17:03:07
我不認爲你需要將OrderStatus聲明爲DataContract。根據我的經驗,如果Enums被另一個屬於合同一部分的類使用,它將自動被合約化。
此外,存在一個[EnumMember]
屬性,可讓您選擇要通過合同暴露哪些枚舉值,如果因爲某些原因不想公開所有枚舉值。
酷!關於「如果Enum被另一個屬於合同一部分的類使用,它們會自動合同化。」 - 我已經從客戶端代理代碼進行測試,這是事實。但是我還沒有找到任何提到這個的WCF正式文件,這就是我來這裏問的原因。你有什麼好的文件可以分享嗎? – George2 2009-06-13 17:54:15
如果您關心使用正確的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屬性,您可以選擇不發佈上面提到的所有枚舉值。
當你在Pwninstein的回答中要求提供一個文檔的評論時,我在這裏寫了postig。
http://msdn.microsoft.com/en-us/library/aa347875.aspx
它說(在簡單枚舉部分):
還可以序列枚舉類型到的DataContractAttribute屬性還沒有被應用。除了每個成員(沒有應用NonSerializedAttribute屬性)被視爲應用了EnumMemberAttribute屬性之外,這些枚舉類型的處理方式與前面所述完全相同。
希望它能幫助:d
(回覆評論) – 2009-06-14 22:29:34