Я предполагаю, что вы используете asmx web-сервисы для этого ответа.
Ваше предположение верно - 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, это преобразование обычно обрабатывается для вас. Если в службу передается значение, которое не может быть десериализовано в значение enum, вы получите сообщение, которое видите.
Чтобы обойти это, вы можете убедиться, что отправляете ожидаемое значение или, если это не работает, вы можете указать XML-сериализатору, какие значения вы хотите использовать. Вы можете сделать это, используя атрибут XmlEnum:
public enum QueryType
{
[XmlEnum("1")]
Inquiry = 1,
[XmlEnum("2")]
Maintainence = 2
}
Это сгенерирует следующий фрагмент схемы (из WSDL):
<s:simpleType name="QueryType">
<s:restriction base="s:string">
<s:enumeration value="1" />
<s:enumeration value="2" />
</s:restriction>
</s:simpleType>
Затем, если вы передаете значение «2» в службу, его следует правильно десериализовать, но вы потеряете значение значений перечисления.