【问题标题】:Cannot convert type 'object[][]' to 'System.Collections.Generic.List<object>'无法将类型“object[][]”转换为“System.Collections.Generic.List<object>”
【发布时间】:2012-09-17 19:14:08
【问题描述】:

我正在尝试创建和使用 Web 服务...我正在使用 .NET Framework 4.0 (c#)。 该服务公开了这样一个方法:

  public List<object[]> GetData(string strRegion, List<string> lstBrand, List<string> lstColor)

然后在客户端应用程序上,我声明一个对象列表:

  List<object[]> lst = new List<object[]>();

...并尝试像这样填充它:

  MyService.MyClient os = new MyClient();
  lst = os.GetData(myRegionString, myBrandList, myColorList);

...但我得到,“不能将类型'object [] []'隐式转换为'System.Collections.Generic.List'”。我做错了什么?

谢谢!

【问题讨论】:

  • 看起来服务方法实际上并没有返回List&lt;object[]&gt;,而是object[][]

标签: c# asp.net web-services list ienumerable


【解决方案1】:

在解决方案资源管理器中,右键单击您的服务并进行配置。您可能已将数据收集默认类型设置为数组。您可以将其设置为列表类型。另外,我会重新考虑通过网络服务发送object。您通常需要定义良好的数据类型。我认为您甚至不能通过网络服务发送类型 object

【讨论】:

  • 你是什么意思,“......你通常想要一个定义明确的数据类型......”?
  • Web 服务将为消费者提供一个 WSDL 文件,该文件描述每个对象/参数的数据类型。 Object 类型可以是任何东西,因此不能很好地定义。您可能希望使用intstringdouble 等。您可以拥有自己的数据类型并包含这些基本数据类型。然后 WSDL 将向消费者描述您的自定义数据类型包含的内容。
  • 如果要发送一个列表,其中每个列表项都包含字符串、数字和日期等对象,该怎么办?
  • 您如何知道接收端将其转换为什么类型?
【解决方案2】:

试试

MyService.MyClient os = new MyClient();
  lst = os.GetData(myRegionString, myBrandList, myColorList).ToList();

列表在从 Web 服务传递到客户端时会被序列化为数组,因此您需要再次将其转换回列表。

【讨论】:

    【解决方案3】:

    MyClient.GetData() 方法返回一个锯齿状数组。要将此数组转换为列表,您应该能够使用 System.Linq 命名空间中的 ToList() 方法:

    lst = os.GetData(myRegionString, myBrandList, myColorList).ToList();
    

    【讨论】:

      【解决方案4】:

      很明显,您返回的是一个锯齿状数组,而不是 object[] 的通用列表。已经提出了一种解决方案 - 只需更改返回值的类型。但我认为更好的是在任何地方都使用接口——数组和泛型列表都实现了 IList,所以如果你让你的方法返回 IList 类型的值,并且你的 lst 变量也是 IList,那么你不应该即使您的方法返回锯齿状数组也会有问题。

      【讨论】:

        猜你喜欢
        • 2011-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 2019-01-18
        • 1970-01-01
        • 1970-01-01
        • 2018-11-12
        相关资源
        最近更新 更多