Почему мой сервис WCF возвращает и ARRAY вместо List <T>? - PullRequest
12 голосов
/ 26 марта 2010

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

 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();
    }

Почему это массив? Я попросил список.

помощь.

Ответы [ 4 ]

29 голосов
/ 26 марта 2010

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

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

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

4 голосов
/ 26 марта 2010

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

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

2 голосов
/ 25 июня 2010

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

1 голос
/ 26 марта 2010

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

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