Попытка передать IList<T>
на самом деле не подходит для службы на основе WCF.
WCF взаимодействует в терминах контрактов на данные, определяя форму данных, которые служба или клиент ожидают отправитьи получить.Эти контракты должны быть достаточно конкретными, чтобы сериализаторы знали, как преобразовать их в XML, JSON и другие представления.
Когда вы добавляете интерфейс типа IList<T>
в свои контракты на обслуживание, вы не предоставляете сериализаторуДостаточно информации об указанной форме ваших данных.Вас интересует только отправка IList<T>
части реализации?Вас интересуют какие-либо другие данные с состоянием, содержащиеся в чем-то, реализующем интерфейс?Сериализаторы не могут знать.
Самое простое решение - использовать базовые объекты передачи данных с WCF.Это простые классы, которые предназначены только для представления информации, передаваемой через носитель.Эти классы содержат только конкретные типы и легко понимаются сериализаторами.Когда вы хотите отправить сообщение, вы создаете экземпляры этих объектов и заполняете их данными.
Для вашего примера создайте List<T>
вместо IList<T>
и скопируйте значения в список перед передачей его всервис.Простой способ сделать это с помощью метода расширения Enumberable.ToList<T>()
.