2009-02-03 42 views
0

我們使用Flex 3來使用.NET Web服務。 Web服務使用枚舉,我們使用Flex Builder自動生成Web服務對象。這裏是.NET web服務枚舉的定義:Flex,.NET Web服務和數值枚舉

/// <summary> 
   /// User type 
   /// </summary> 
   public enum UserTypeEnum 
   { 
       Admin = 1, 
       User = 3, 
       Manager = 4 
   } 

當Flex生成Web服務對象時,它將它們視爲字符串而不是整數值。

[Inspectable(category="Generated values", enumeration="Admin, User, Manager", type="String")] 
public var _UserTypeEnum:String;public function toString():String 
{ 
return _UserTypeEnum.toString(); 
} 

當我們從Web服務的數據,使用此枚舉的任何屬性是空的,而不是「管理」或「1」。有什麼辦法可以做到這一點?

+0

你有沒有得到這個工作?我處於同樣的情況,但我並不真正關心數值,只是希望它被填充,並不總是空的 – 2010-01-04 22:43:17

回答

1

請注意,枚舉和Web服務存在問題。

看到這個question

  • 應該在Web服務中使用[Serializable,Flags]。
  • 標誌應兩個
  • 倍數枚舉定義應該從1開始,而不是0。
+1

小知識我知道,但* power *肯定是兩個,不是簡單的倍數... :) – inferis 2009-02-10 21:39:25

0

在從C(C#,C++,Java)來導出的語言,一個enum實際上是一組命名爲整數值。

在XML Schema中沒有相應的概念,因此在Web服務中沒有這樣的概念。

在您或其他人提到<xs:enumeration/>方面之前,這不是它的目的。 <xs:enumeration/>提供了一個類型可能的詞彙值列表(枚舉)。沒有辦法將數字與這些詞彙值相關聯。以下enum

public enum Enumeration1 
{ 
    E1a = 1, 
    E1b = 2, 
    E1c = 4 
} 

變爲以下XML模式:

<s:simpleType name="Enumeration1"> 
    <s:restriction base="s:string"> 
     <s:enumeration value="E1a"/> 
     <s:enumeration value="E1b"/> 
     <s:enumeration value="E1c"/> 
    </s:restriction> 
</s:simpleType> 

注不存在1,2或4

所有這說的是,這樣的一個元素或屬性類型將是一個字符串,並且可能具有值「E1a」,「E1b」或「E1c」中的一個。

如果客戶端代理是使用這種模式從WSDL構建的,並且代理代碼生成器足夠智能,則可以決定它最初是編程語言enum。在這種情況下,它會創建類型爲

public enum Enumeration1 
{ 
    E1a, 
    E1b, 
    E1c 
} 

因爲它無法訪問整數。