2011-06-20 72 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,