将字符串转换为结构

时间:2014-01-04 07:57:23

标签: vb.net

我已经成功地将结构数据转换为普通的字符串here和(如建议的)XML序列化方式,显然每个都有它自己的好的和坏的副作用。

这是样本结构:

Public Structure myList
    Dim a As String
    Dim b As Integer
    Dim c As Double
End Structure

Dim myInstance As New myList
myInstance.a = "Nemo"
myInstance.b = 10
myInstance.c = 3.14

现在我有2个函数将结构数据转换为字符串:

  1. Dim xString As String = oStructToString(myInstance)

    Public Function oStructToString(ByVal obj As Object) As String
    
      Dim structString As String = ""
      Dim i As Integer
      Dim myType As Type = obj.GetType()
      Dim myField As System.Reflection.FieldInfo() = myType.GetFields()
      For i = 0 To myField.Length - 1
        structString &= myField(i).GetValue(obj)
        If i = myField.Length - 1 Then Exit For
        structString &= Convert.ToChar(161)
      Next i
    
      Return structString
    End Function 
    
  2. Dim xString As String = xStructToString(myInstance)

    Public Function xStructToString(ByVal obj As Object) As String
    
      Dim x As New Xml.Serialization.XmlSerializer(obj.GetType)
      Dim sw As New IO.StringWriter()
      x.Serialize(sw, obj)
      Return sw.ToString
    End Function
    
  3. 但我无法从字符串到结构中获取数据。

    Public Function oStringToStruct(ByVal xString As String) As Object
    

    所以我可以致电:

    Dim mySecondInstance As New myList = oStringToStruct(xString)
    

    或者

    Dim mySecondInstance As New myList = xStringToStruct(xString)
    

    怎么做?

    到目前为止,我来到这里:

    Public Function xStringToStruct(ByVal xString As String) As Object
    
        Dim x As New Xml.Serialization.XmlSerializer() ''<- what here?
        Dim sr As New IO.StringReader(xString)
        Return x.Deserialize(sr)
    End Function
    

    这...... 在har07的帮助下,仍然存在一个错误......

    Public Function oStringToStruct(ByVal xString As String, ByVal type As Type) As Object
    
        Dim structString() As String = xString.Split(Convert.ToChar(161))
        Dim myType As Type = type.GetType()
        Dim myField As System.Reflection.FieldInfo() = myType.GetFields()
        For i As Integer = 0 To structString.Length - 1
            myField(i).SetValue(type, structString(i)) ''here crashes
        Next i
    
        Return type
    End Function
    

1 个答案:

答案 0 :(得分:1)

将xml字符串反序列化回struct更容易:

Public Function xStringToStruct(ByVal xString As String, ByVal type As Type) As Object
    Dim x As New Xml.Serialization.XmlSerializer(type)
    Dim sw As New IO.StringReader(xString)
    Return x.Deserialize(sw)
End Function

您可以像这样使用它:

Dim xObject As myList = xStringToStruct(xString, GetType(myList))