Vb.net 可序列化多维数组的类是什么?

Vb.net 可序列化多维数组的类是什么?,vb.net,web-services,arrays,class,serialization,Vb.net,Web Services,Arrays,Class,Serialization,编辑:见下文 我有一个web服务,它使用一类函数(通过InfoPath)返回各种业务流程中使用的数据 其中一个函数接受给定的SQLCommand对象并将其执行到SQLDataReader中。现在,根据使用的SQL命令文本,这可能返回一列或多列中的一行或多行。那么这个函数返回的最佳类是什么呢?记住它需要由web服务序列化 我现有的代码是: Dim array As New ArrayList Try conCMS.Open() Dim rdr A

编辑:见下文

我有一个web服务,它使用一类函数(通过InfoPath)返回各种业务流程中使用的数据

其中一个函数接受给定的SQLCommand对象并将其执行到SQLDataReader中。现在,根据使用的SQL命令文本,这可能返回一列或多列中的一行或多行。那么这个函数返回的最佳类是什么呢?记住它需要由web服务序列化

我现有的代码是:

    Dim array As New ArrayList

    Try

        conCMS.Open()
        Dim rdr As SqlDataReader = cmdCurrent.ExecuteReader

        While rdr.Read
            If rdr.VisibleFieldCount > 1 Then
                Dim complexType(rdr.VisibleFieldCount - 1) As String
                For rowIndex As Integer = 0 To rdr.VisibleFieldCount - 1
                    complexType(rowIndex) = rdr(rowIndex)
                Next
                array.Add(complexType)
            Else
                array.Add(rdr(0))
            End If
        End While
        conCMS.Close()

        Return array

    Catch ex As Exception

        array.Add("ERROR " & ex.Message)

    End Try

    Return Nothing
现在我知道这不是有效的代码,但这是一项正在进行的工作

正如您可能看到的,这将生成一个字符串数组来表示包含多个列的行,但是web服务无法对其进行序列化

所以有两件事是真的

  • 关于要使用的有效类型的一些指导(无需编写自己的可序列化类)
  • 关于进一步改进代码的一些建议
提前谢谢

编辑: 我只需创建一个嵌套的arrayList,就成功地实现了序列化,如下所示(doh!):


但是,请告诉我如何改进。

如果您的代码在调用之前知道返回数据的模式,那么您应该以相同的形状返回数据。为返回数据的每一列创建一个具有适当类型属性的结构或类。对于每一行,创建这样一个结构的实例,并填写返回列中的属性。然后将每个实例添加到该结构的强类型列表中,即(T的)列表。然后返回列表


首先,ArrayList是在.NET中出现泛型之前创建的。现在,最好使用强类型集合,而不是ArrayList,ArrayList基本上是(任何内容的)列表。

谢谢John,问题是这段代码可能会从未知表返回未知数量的列。此代码与后面的实际数据非常松散地耦合。所以我不能创建一个固定的类来定义返回的数据。注意到你在ArrayList上的观点,但是如果没有一个结构来表示数据,我就不能有一个列表(T),因为T必须是Object,而这只是ArrayList,对吗?
   If rdr.VisibleFieldCount > 1 Then
    Dim complexType As New ArrayList
    For rowIndex As Integer = 0 To rdr.VisibleFieldCount - 1
      complexType.Add(rdr(rowIndex))
    Next
    array.Add(complexType)
   Else
    array.Add(rdr(0))
   End If