Я использую клиент WCF для вызова веб-службы JAX.
Когда ответ десериализован, массив в объекте ответа всегда пуст. Однако, если я вручную добавлю пространство имен к типу массива в ответе с помощью инспектора сообщений, ответ будет десериализован правильно.
Итак, я получаю ответ:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" />
<S:Body>
<ns2:myResponse xmlns:ns2="http://mynamespace.com/">
<myArray>
<myObject>
<myString>abcde</myString>
<myInt>12345</myInt>
</myObject>
</myArray>
<id>7777</id>
</ns2:myResponse>
</S:Body>
</S:Envelope>
и это создаст объект типа myResponse с правильным полем 'id', но пустым массивом типа myObject для поля myArray.
Когда я вручную редактирую полученное сообщение, добавляя псевдоним пространства имен 'ns2' перед тегами myObject, чтобы он выглядел так:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" />
<S:Body>
<ns2:myResponse xmlns:ns2="http://mynamespace.com/">
<myArray>
<ns2:myObject>
<myString>abcde</myString>
<myInt>12345</myInt>
</ns2:myObject>
</myArray>
<id>7777</id>
</ns2:myResponse>
</S:Body>
</S:Envelope>
правильный объект десериализован, т.е. с myArray размера 1, содержащим правильный myObject.
Может кто-нибудь сказать мне, почему это так и как я могу заставить десериализацию WCF работать правильно без ручного вмешательства?