2011-06-20 24 views
1

我有一個枚舉的WSDL聲明如下問題的枚舉時WSDL到Visual Studio

<xsd:simpleType name="KopRate"> 
     <xsd:annotation> 
      <xsd:documentation>Information</xsd:documentation> 
     </xsd:annotation> 
     <xsd:restriction base="xsd:string"> 
      <xsd:enumeration value="0" /> 
      <xsd:enumeration value="13" /> 
      <xsd:enumeration value="21" /> 
      <xsd:enumeration value="56" /> 
      <xsd:enumeration value="ts" /> 
      <xsd:enumeration value="kp" /> 
     </xsd:restriction> 
</xsd:simpleType> 

的問題是,Visual Studio生成一個枚舉類像這樣(加這個「項目」字):

namespace TestNmsp 
{ 
    [GeneratedCode("System.Xml", "4.0.30319.1")] 
    [XmlType(Namespace = "http://www.kop.com/test/schema")] 
    [Serializable] 
    public enum KopRate 
    { 
     [XmlEnum("0")] Item0, 
     [XmlEnum("13")] Item13, 
     [XmlEnum("21")] Item21, 
     [XmlEnum("56")] Item56, 
     ts, 
     kp, 
    } 
} 

當然,我想有一個枚舉沒有這個'項目'部分。爲什麼會發生這種情況,我該如何通過?

+0

'爲什麼'是因爲C#標識符不能以數字開頭。 '如何'我會離開誰知道 – AakashM

+0

嗯,也許沒有人知道。這實際上是造成問題嗎?我想從'XmlEnum'屬性中,webservice調用確實可以正常工作,只是希望代碼能夠通過其「真實」名稱引用enum值? – AakashM

回答

0

因爲要添加的字項目的原因是因爲以下幾點:

public enum KopRate 
{ 
    0, 
    13, 
    21, 
    56, 
    ts, 
    kp 
} 

是無效的C#語法。將WSDL保持爲能夠反序列化可能值的解決方法是添加一個字母或其他東西作爲前綴。在這種情況下,「項目」字。

如果您可以控制WSDL,建議更改枚舉的值以遵守命名約定。

如果你這樣做不是可以控制WSDL。您可以隨時更改枚舉,但要保留XMLEnum屬性,以便讓反序列化過程正常工作。

例如爲:

namespace TestNmsp 
{ 
    [GeneratedCode("System.Xml", "4.0.30319.1")] 
    [XmlType(Namespace = "http://www.kop.com/test/schema")] 
    [Serializable] 
    public enum KopRate 
    { 
     [XmlEnum("0")] Rate0, 
     [XmlEnum("13")] Rate13, 
     [XmlEnum("21")] Rate21, 
     [XmlEnum("56")] Rate56, 
     ts, 
     kp, 
    } 
} 

請注意,如果你重新生成代理,你將失去這一變化。

Regards,