Я обращаюсь к стороннему веб-сервису, написанному на php.
Служба wsdl добавлена в качестве веб-ссылки в мой проект и в большинстве случаев работает нормально.
Теперь проблема, с которой я часто сталкиваюсь, заключается в следующем:
Параметры в wsdl имеют определенный тип (string, bool, int), но у них не установлен атрибут nillable. Теперь часто int или bool возвращаются как пустые элементы в ответе, что приводит к ошибке преобразования:
[FormatException: Input string was not in a correct format.]
System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +9594283
System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +119
System.Xml.XmlConvert.ToInt32(String s) +43
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadernutritionService.Read6_NullableOfInt32(Boolean checkType) +125
Что я сейчас делаю, чтобы это исправить, так это изменим все типы параметров на строковые, чтобы они не выдавали ошибок на пустых элементах. Мне вообще не нравится это решение, поэтому мне было интересно, могу ли я как-то переопределить это, чтобы, когда элемент пуст, я мог просто заполнить 0 для int и false для bool.
Есть предложения?