无法从'List <t>'转换为'T []'</t>

时间:2009-10-21 19:54:56

标签: c# wcf generics list

我正在尝试将类型为List<UploadQueue>的列表对象传递给WCF SOAP 相同参数类型的方法,我收到错误:

  

无法转换   'System.Collections.Generic.List'   到'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 个答案:

答案 0 :(得分:14)

在您的客户端项目中,您需要右键单击服务引用并选择“配置服务引用”。在配置屏幕上的“数据类型”部分中,您需要将集合类型设置为System.Collections.Generic.List而不是System.Array。

答案 1 :(得分:3)

生成的客户端已替换List with an Array(默认行为)。使用VS.NET 2008,您可以选择使用List生成此代码 - 请查看Configure Service Dialog Box。正如其他人所说,ToArray会起作用。

答案 2 :(得分:1)

尝试做结果.ToArray()。这可能会解决它。

upload.DoUpload(results.ToArray());

问题是soap服务表示它需要一个对象数组,而不是列表。当从WSDL构建代理类时,它会将其转换为满足服务(数组)需求的最基本对象。

答案 3 :(得分:1)

retParam = upload.DoUpload(results.ToArray());

......或类似的。