Search code examples
vb.netweb-servicessoapwsdlmember

How to parameterise a object member in VB.NET for WSDL


I have some code that populates a SOAP request in VB.NET. I get the data from a SQL query and run through the objects members to populate each one. I'm trying to find a quick(ish) way to not provide the member when it is empty rather than checking each value before applying it. As the SQL data comes in from a pipe delimited file in the first place we never get NULL just empty cells which get sent in the SOAP request as "".

Is there a way to define an objects member using a variable rather than its literal name?

UpLB_request_Items.Spare8 = Convert.ToString(SourceDataSet.tables(0).Rows(i)(colSPARE8))
UpLB_request_Items.Spare9 = Convert.ToString(SourceDataSet.tables(0).Rows(i)(colSPARE9))
UpLB_request_Items.Spare10 = Convert.ToString(SourceDataSet.tables(0).Rows(i)(colSPARE10))
Call IterateObject(UpLB_request_Items)

So this populates each member with the value from the SQL data (SourceDataSet), then I could send the completed object down to a Sub to check each value before I actually send it to the webservice

Sub IterateObject(objName)
    Dim CollName = ""
    For Each m As System.Reflection.PropertyInfo In objName.GetType().GetProperties()
        If m.CanRead Then
            If m.PropertyType.Name = "String" Then
                CollName = m.Name
                Dim CollVal = CallByName(objName, CollName, CallType.Get)
                If CollVal = "" Then
                    objName.CollName = Nothing 'this is the tricky bit
                End If
            End If
        End If
    Next
End Sub

The bit where it obviously breaks is objName.CollName = Nothing as it will then say that the object doesn't have a member called CollName and I'm not sure if there is a way to force the code to evaluate CollName to its value (e.g. SPARE8 rather than the string "CollName")


Solution

  • I went with this in the end

    UpLB_request_Items.Spare4 = Strings.Replace(Convert.ToString(SourceDataSet.Tables(0).Rows(i)(colSPARE4)), "", Nothing)