Я продолжаю сталкиваться с несоответствиями пространства имен при попытке десериализации ответа SOAP.
Ответ неквалифицирован, а вложенные сложные типы квалифицируются с помощью пространства имен следующим образом:
<getResult>
<enc:ApplicationExceptionOccurred xmlns:enc="com.namespace1.www/complexTypes">false</enc:ApplicationExceptionOccurred>
<enc:SystemExceptionOccurred xmlns:enc="com.namespace1.www/complexTypes">false</enc:SystemExceptionOccurred>
<enc:ComplexType xmlns:enc="com.namespace1.www/complexTypes">
...
</enc:ComplexType>
</getResult>
Iможно получить правильные пространства имен, добавив следующий атрибут к сгенерированным типам:
[System.Xml.Serialization.XmlElementAttribute(Namespace="com.namespace1.www/complexTypes", Form=System.Xml.Schema.XmlSchemaForm.Qualified, Order=0)]
Это прекрасно работает, если сообщение является буквальным.Однако этот сервис использует кодировку SOAP.Когда я добавляю следующее в XmlSerializerFormatAttribute:
Use = System.ServiceModel.OperationFormatUse.Encoded
, тогда атрибуты XmlElementAttributes игнорируются, и у меня снова возникают проблемы с несоответствием пространства имен.Я предполагаю, что мне нужно вместо этого использовать SoapElementAttribute, но у него нет способа установить пространство имен.
Итак ... Как я могу установить пространство имен аналогично XmlElementAttribute в сообщениях, закодированных в Soap?