Ошибка проверки экземпляра: '2' не допустимое значение для QueryType. (веб-сервис)

Одна из характеристик действительно хорошего программиста - то, что плохой код дает им тошнотворный живот.

я стремлюсь иметь весь свой код не только чистый компилятор, но также и быть чистым в моем наборе IDE к довольно придирчивому уровню. Я должен буду иногда подавлять экземпляр предупреждения, если я буду знать лучше, чем инструмент, но по крайней мере который также служит документацией.

8
задан Dor Cohen 31 July 2012 в 13:47
поделиться

2 ответа

Я предполагаю, что вы используете веб-службы asmx для этого ответа.

Ваше предположение верно - сериализатор XML использует имена перечислений в WSDL, а не значение.

] Если вы посмотрите на свой WSDL, он будет выглядеть примерно так:

<s:simpleType name="QueryType">
  <s:restriction base="s:string">
    <s:enumeration value="Inquiry" /> 
    <s:enumeration value="Maintainence" /> 
  </s:restriction>
</s:simpleType>


Итак, когда вы вызываете службу, она ожидает строку, которая является именем члена перечисления. Когда вы используете прокси .NET, это преобразование обычно выполняется за вас. Если в службу передается значение, которое не может быть десериализовано в значение перечисления, вы получите сообщение, которое видите.

Чтобы обойти это, вы можете убедиться, что отправляете ему ожидаемое значение или, если это не так. t работает на вас, вы можете указать сериализатору XML, какие значения вы хотите использовать. Это можно сделать с помощью атрибута XmlEnum:

public enum QueryType 
{
    [XmlEnum("1")]
    Inquiry = 1,
    [XmlEnum("2")]
    Maintainence = 2
}


Будет создан следующий фрагмент схемы (из WSDL):

7
ответ дан 5 December 2019 в 19:01
поделиться

Попробуйте добавить атрибут Flags () в определение QueryType.

2
ответ дан 5 December 2019 в 19:01
поделиться
Другие вопросы по тегам:

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