Не удается преобразовать из списка <T>в T [] - PullRequest
0 голосов
/ 21 октября 2009

Я пытаюсь передать объект списка типа List<UploadQueue> методу WCF SOAP того же типа параметра, и получаю сообщение об ошибке:

Невозможно преобразовать из 'System.Collections.Generic.List 'to' WebAPI.Upload.UploadQueue [] '

Я не понимаю этого, поскольку тип параметра моего метода WCF (ниже) равен List<UploadQueue>:

IService.DoUpload(List<UploadQueue> request)

Вот код, который вызывает «DoUpload», который возвращает вышеуказанную ошибку.

    List<UploadQueue> results = new List<UploadQueue>();
    HttpPostedFile m_objFile  = default(HttpPostedFile);
    int m_objFlag = default(int);
    Guid m_objGuid = Guid.NewGuid();
    DateTime m_objDate = DateTime.Now;

    try
    {
        if (Request.Files.Count > 0)
        {
            for (var j = 0; i <= (Request.Files.Count - 1); j++)
            {
                m_objFile = Request.Files[j];

                if (!(m_objFile == null | string.IsNullOrEmpty(m_objFile.FileName) | m_objFile.ContentLength < 1))
                {
                    results.Add(new UploadQueue(
                        m_objGuid,
                        m_objFlag,
                        m_objFile.ContentLength,
                        m_objFile.FileName,
                        m_objDate)
                    );

                }

            }
        }

    }
    catch (Exception ex)
    {
        //handle error
    }

    retParam = upload.DoUpload(results);

Идеи?Спасибо.

Ответы [ 4 ]

14 голосов
/ 22 октября 2009

В вашем клиентском проекте необходимо щелкнуть правой кнопкой мыши ссылку на службу и выбрать «Настроить ссылку на службу». На экране конфигурации в разделе «Тип данных» необходимо установить тип коллекции System.Collections.Generic.List вместо System.Array.

3 голосов
/ 21 октября 2009

Сгенерированный клиент заменил список на массив (поведение по умолчанию). В VS.NET 2008 у вас есть возможность сгенерировать это с помощью списка вместо этого - посмотрите на Configure Service Dialog Box . Как уже говорили другие, ToArray будет работать.

1 голос
/ 21 октября 2009
retParam = upload.DoUpload(results.ToArray());

... или аналогичный.

1 голос
/ 21 октября 2009

Попробуйте сделать результаты. ToArray (). Это, вероятно, исправит это.

upload.DoUpload(results.ToArray());

Проблема в том, что сервис мыла говорит, что ему нужен массив объектов, а не список. Когда прокси-класс создается из WSDL, он преобразует его в самый простой объект, который может удовлетворить потребности службы, которая является массивом.

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