веб-сервис не может сериализировать интерфейс

получил эту ошибку, когда словарь был пуст и поэтому не мог создать кадр данных из пустого словаря.

Таким образом, решение состоит в том, чтобы проверить наличие пустого словаря и действовать соответствующим образом

9
задан Community 23 May 2017 в 12:00
поделиться

3 ответа

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

[WebMethod]
[XmlInclude(typeof(MyDocument))]
public Boolean ReceiveDocument(IDocument document)
{
    DBIO io = new DBIO();

    return io.InsertIntoDB(document); // does nothing; just returns true
}
7
ответ дан 4 December 2019 в 21:51
поделиться

+1 для firedfly, однако нужно отметить, что атрибут XmlInclude может быть добавлен к классу веб-сервиса, а не к каждому методу (или базовый тип, который является также опцией). Я протестировал его, и код сгенерирован хорошо, сохранив структуру наследования.

Я получил это от раздела комментариев того же блога, который он упомянул, таким образом, кредит переходит к OP.

BTW это не комментарий к сообщению firedfly, потому что у меня нет достаточной репутации для комментария

1
ответ дан 4 December 2019 в 21:51
поделиться

Asp.net должен должен быть смочь сказать, какого определенного класса это инстанцирует при вызове того метода. Поэтому это работает при определении нескольких методов с определенными классами, т.е. вызов скажет Вам который класс использовать.

Рассмотрите, хотите ли Вы, чтобы клиент отправил тот же набор информации для какого-либо документа, или если действительно необходимо смочь отправить другую информацию за различными документами. С позже, Вам нужен клиент для знания классов, которые реализуют IDocument, и Вы делаете это с XmlInclude (как firedfly отправленный).

Если Вы вместо этого хотите всегда отправить ту же информацию и не теперь об определенных классах, определить класс с той информацией и именно это Вы получаете в методах. Если действительно необходимо играть с IDocument в остальной части служебного кода, иметь appropiate логику в сервисе, который получает Вас экземпляр IDocument с помощью полученных данных.

1
ответ дан 4 December 2019 в 21:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: