Почему моя служба WCF возвращается и ARRAY вместо List <T>?

В веб-сервисе я говорю

 public List<Customer> GetCustomers()
    {
        PR1Entities dc = new PR1Entities();
        var q = (from x in dc.Customers
                select x).ToList();
        return q;
    }

(клиент - объект объекта)

Затем я создаю прокси-сервер, когда добавляю службу.. и в reference.cd говорится

public wcf1.ServiceReference1.Customer[] GetCustomers() {
        return base.Channel.GetCustomers();
    }

ПОЧЕМУ ОНА? Я попросил Список.

помощь.

Ответ 1

Щелкните правой кнопкой мыши ссылку на службу и выберите "Настроить сервисную ссылку".

В раскрывающемся списке Тип коллекции выберите тип System.Collections.Generic.List.

Я считаю, что причина, по которой он по умолчанию относится к массиву, заключается в том, что он наиболее совместим при сериализации. Если вы потребляете услугу из того, что распознает что-то более сложное, вы можете настроить, как я уже говорил.

Ответ 2

Щелкните правой кнопкой мыши ссылку на службу → Настроить ссылку на службу → В разделе "Тип данных" измените "Тип коллекции" на System.Collections.ArrayList или на любой тип, который вы хотите, чтобы массив десериализовался как.

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

Ответ 3

У меня есть мой набор для System.Collections.Generic.List, но внезапно, когда я делаю ссылку на службу обновлений, мой сгенерированный прокси возвращает типы массивов! что с этим?

Ответ 4

Потому что это то, как список сериализуется. Ваш класс Customer на стороне клиента был сгенерирован из метаданных службы, который фактически описывает, как он сериализован не так, как он был первоначально определен. Если ваш исходный класс Customer доступен, вы можете указать его повторное использование в клиентском коде при создании ссылки на службу, а затем он будет представлен как List<T>.