Десериализация ответа SOAP от веб-службы Java в C # - PullRequest
2 голосов
/ 05 января 2012

Я пытаюсь вызвать сторонний веб-сервис, написанный на java, из компонента, созданного на C # и работающего с .net framework 4.0.WSDL находится здесь .

Проблема, с которой я сталкиваюсь, заключается в том, что мой прокси-класс C # не будет десериализовать ответ от метода GetProjects должным образом, поскольку он генерирует класс для Project, ноответ не содержит сопоставление элемента Project, а скорее элемент "item" с Project, указанным в атрибуте xsi: type.

Из моего исследования проблемы выясняется, что десериализация не удалась, посколькуузел Project возвращается как <item xsi:type="ns1:Project" xmlns="" xmlns:ns1="http://v3.soap.api.indextools.com">, но прокси-сервер ожидает <Project>.

Поскольку прокси-сервер генерируется автоматически при добавлении ссылки на службу и потому, что у меня нет возможности изменить веб-службу,Мне любопытно, как можно обойти эту проблему, чтобы мой прокси-класс правильно десериализовал ответ.Эта проблема не изолирована исключительно для метода GetProjects.Я ожидаю, что у меня будут те же проблемы с другими методами в сервисе, поэтому мы будем признательны за решение этой проблемы в глобальном масштабе.

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Возможно, попробуйте изменить имя, под которым сериализован Проект:

[DataContract(Name="item")]
public partial class Project { }

Это должно указывать WCF ожидать <item> вместо <Project>.

, поскольку Projectсгенерированный частичный класс, вы должны поместить его в свой собственный файл .cs.

0 голосов
/ 05 января 2012

Предполагая, что Project расширяет Item, для API Java SOAP характерно возвращать все как базовый тип. Вы пробовали что-то вроде:

var item = proxy.GetProjects(...);
var project = item as Project;

Некоторые из поддерживаемых Java SOAP API, с которыми я работал, требуют этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...