WSDL, Enums и C #: все еще мутно

Я пытался найти это в Интернете, но все примеры WSDL, похоже, не совсем объясняют, Я должен пометить вещи как строку базового типа в WSDL или int ...

По сути, я пытаюсь создать свой WSDL, чтобы я мог представлять перечисление. Я уже имею в виду C # Enum, что хочу сопоставить его с ...

public enum MyEnum {
    Item1 = 0,
    Item2 = 1,
    Item3 = 2,
    SpecialItem = 99
}

Я не уверен, как должен выглядеть мой 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>

ИЛИ

<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>
7
задан m-y 30 August 2010 в 13:33
поделиться

1 ответ

Перечисления будут выглядеть как их строковые представления. Таким образом, правильный 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>

Вышеприведенное автоматически сериализует/десериализует для вас тип перечисления MyEnum. Если вы представите перечисления как xsd:int, вам придется вручную преобразовывать их туда и обратно.

Вы можете ссылаться на определение перечисления в своей схеме следующим образом:

<xsd:complexType name="Class1">
    <xsd:sequence>
      <xsd:element minOccurs="1" maxOccurs="1" name="MyEnumProperty" type="MyEnum" />
    </xsd:sequence>
  </xsd:complexType>
9
ответ дан 7 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: