WSDL,Enums和C#:它仍然是模糊的

m-y*_*m-y 7 c# wsdl enumeration

我尝试在线查看,但是所有的WSDL示例似乎都没有真正解释我是否应该在WSDL或int中将事物标记为基类型字符串...

基本上,我正在尝试创建我的WSDL,以便我可以表示枚举.我有一个C#Enum已经考虑到了我想要匹配它...

public enum MyEnum {
    Item1 = 0,
    Item2 = 1,
    Item3 = 2,
    SpecialItem = 99
}
Run Code Online (Sandbox Code Playgroud)

我不确定我的WSDL应该如何看待......我认为它是两个中的一个,但即便如此,我也不是100%肯定......

<wsdl:types>
    <xsd:schema targetNamespace="http://www.mysite.com/MyApp"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                >
        <xsd:simpleType name="MyEnum">
            <xsd:restriction base="xsd:int">
                <xsd:enumeration value="0" />
                <xsd:enumeration value="1" />
                <xsd:enumeration value="2" />
                <xsd:enumeration value="99" />
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:schema>
</wsdl:types>
Run Code Online (Sandbox Code Playgroud)

要么

<wsdl:types>
    <xsd:schema targetNamespace="http://www.mysite.com/MyApp"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                >
        <xsd:simpleType name="MyEnum">
            <xsd:restriction base="xsd:string">
                <xsd:enumeration value="Item1" />
                <xsd:enumeration value="Item2" />
                <xsd:enumeration value="Item3" />
                <xsd:enumeration value="SpecialItem" />
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:schema>
</wsdl:types>
Run Code Online (Sandbox Code Playgroud)

cod*_*ife 9

枚举最终看起来像他们的字符串表示.所以正确的wsdl会将枚举显示为:

<xs:simpleType name="MyEnum">
    <xs:restriction base="xsd:string">
      <xs:enumeration value="Item1" />
      <xs:enumeration value="Item2" />
      <xs:enumeration value="Item3" />
      <xs:enumeration value="SpecialItem" />
    </xs:restriction>
  </xs:simpleType>
Run Code Online (Sandbox Code Playgroud)

以上将为您自动序列化/反序列化为MyEnum枚举类型.如果您将枚举显示为xsd:int,那么您将最终必须来回手动转换它们.

您可以在模式中引用枚举定义,如下所示:

<xsd:complexType name="Class1">
    <xsd:sequence>
      <xsd:element minOccurs="1" maxOccurs="1" name="MyEnumProperty" type="MyEnum" />
    </xsd:sequence>
  </xsd:complexType>
Run Code Online (Sandbox Code Playgroud)