2012-08-28 150 views
3

我需要在項目中定義一個Enum來隔離我的WCF服務項目。我正在創建一個包含枚舉和其他數據的對象。當我通過WCF服務將對象傳遞給客戶端時,我得到一個未找到的東西。通過WCF服務傳遞枚舉

枚舉:

public enum Color 
{ 
    Red = 1, 
    Blue, 
    Green, 
} 

對象傳遞:

public class MyObject 
{ 
    public Color ColorEnum { get; set; } 
    public string Name{ get; set; } 
} 

只有當我得到的目的說ColourEnum = Color.Red做服務工作的默認值。如果它沒有設置它休息。我知道這是一種解決方法,但我正在尋找一種更有意義的解決方案,而不是設置一個arb值。我只是想知道爲什麼它打破

在此先感謝

+0

人...枚舉從來良好的服務暴露...... – Adil

+0

@AdilMughal爲什麼呢?枚舉是一個不錯的選擇,並且完全由SOAP協議支持。 – ken2k

+0

我同意他們支持,但基於一些經驗... 簽出stackoverflow後與一些關於枚舉使用良好的討論 http://stackoverflow.com/questions/326339/do-you-use-enum-types-in-你的 - wcf-web-services – Adil

回答

3

問題是屬性的默認值ColorEnum不是您的枚舉的有效值:當您創建MyObject時,該屬性的默認值爲0,並且0不對應於您的枚舉的任何值。

您有多個選項可以糾正此問題。

  • 你可以有Red = 0而不是Red = 1(甚至忽略它,它也有同樣的效果)在枚舉聲明。這樣,默認值將是紅色而不是無意義的值。
  • 您可以向您的枚舉添加一個默認值Default = 0,您知道它具有「顏色未定義」的含義。
  • 你可以有你的屬性格式是一個可空Color?,所以空將成爲雙方的合法值和默認的屬性
  • 你可以有MyObject構造函數指定一個默認顏色的ColorEnum財產。

    public MyObject() this.ColorEnum = Color.Red; }

但是,不管你做什麼,一個枚舉類型的defaul值將始終爲0,如果0不符合法律枚舉成員,它一定是一個問題。

+0

所以你說如果我添加一個枚舉'Default = 0,'除了賦予屬性一些沒有意義的arb值之外,我是否沒有辦法替代默認值0? – nivensookharan

+0

@nivensookharan:我已經編輯了我的答案,有一些選項可以解決您的問題。 – Falanwe

6

嘗試增加你的枚舉值EnumMember屬性。

+0

耶剛剛做到了。仍然不起作用 - 其他任何缺失。我在枚舉之上放置了[DataContract]以及 – nivensookharan

+2

@nivensookharan指定您的枚舉的默認值。序列化程序無法爲您的ColorEnum屬性指定值,因爲默認值爲0,並且您的枚舉從1開始。 – ken2k

6

我在我的WCF項目像這樣的枚舉:

[DataContract] 
public class CarBookReq 
{ 
    [DataMember] 
    public string RefNo { get; set; } 

    [DataMember] 
    public RateType MyProperty { get; set; } 

} 

[DataContract] 
public enum RateType 
{ 
    [EnumMember] 
    silver, 
    [EnumMember] 
    gold, 
    [EnumMember] 
    platinum, 
    [EnumMember] 
    young, 
    [EnumMember] 
    youngplus 
}