Одна из характеристик действительно хорошего программиста - то, что плохой код дает им тошнотворный живот.
я стремлюсь иметь весь свой код не только чистый компилятор, но также и быть чистым в моем наборе IDE к довольно придирчивому уровню. Я должен буду иногда подавлять экземпляр предупреждения, если я буду знать лучше, чем инструмент, но по крайней мере который также служит документацией.
Я предполагаю, что вы используете веб-службы 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):
Попробуйте добавить атрибут Flags ()
в определение QueryType.