什么类的可序列化多维数组?

时间:2009-02-19 15:31:56

标签: vb.net web-services arrays class serialization

编辑:见下文

我有一个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!):

   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

但请告诉我如何改进。

1 个答案:

答案 0 :(得分:1)

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

OBTW,ArrayList是在我们在.NET中使用泛型之前创建的。今天,最好使用强类型集合而不是ArrayList,它基本上是List(Of 任何)。