如何将JSON反序列化嵌套对象写入数据库

时间:2018-03-23 11:01:12

标签: sql .net json

通过REST我使用和反序列化一个Json文件(这里我使用VB但是C#解决方案也会很好)

Dim allDATA As List(Of GeneralInfo) = JsonConvert.DeserializeObject(Of List(Of GeneralInfo))(jstr)

并将其存储在对象

Public Class FullData
    Public Property userRunID As ULong
    Public Property data As List(Of String)
End Class

Public Class GeneralInfo
    Public Property id As ULong
    Public Property name As String
    Public Property data As List(Of FullData)
End Class

在调试模式下,我可以单击对象并查看所有数据。现在我想将数据存储在数据库中。为此我在FullData上创建了两个带有额外GeneralInfoId col的表来提供关系。使用此代码我想写数据

Private Shared Sub AddData(ByRef myGDI As GeneralInfo)
...
        Using command As SqlCommand = New SqlCommand("INSERT INTO GeneralInfo VALUES(@id, @name)", con)
            command.Parameters.Add(New SqlParameter("id", myGDI.id))
            command.Parameters.Add(New SqlParameter("name", myGDI.name))
            command.ExecuteNonQuery()
        End Using

        Using command As SqlCommand = New SqlCommand("INSERT INTO FullData VALUES(@GeneralInfoID, @userRunID, @data)", con)
            command.Parameters.Add(New SqlParameter("GeneralInfoID", myGDI.id))
            command.Parameters.Add(New SqlParameter("userRunID", myGDI.))
            command.Parameters.Add(New SqlParameter("data", myGDI.))
            command.ExecuteNonQuery()
        End Using
...
End Sub

如您所见,我不知道如何访问FullData对象(myGDI.???)数据。谁可以帮助我?

编辑: 我在json文件中获取公司所有参与者的调查数据。 generalinfo对象包含有关公司的数据(ID,公司名称)data属性包含参与者的数据列表,如个人ID(userRunID)和他们的问题data喜欢姓名,每个问题的结果(Simon; Garfunkel; 1; 2; 3; 5; 5; 4; 4; ...)。 我想将这些数据写入数据库。将数据保存在Fulldata.data中作为数据库中的字符串,可以(首先关闭)。

1 个答案:

答案 0 :(得分:0)

你需要在myGDI.data上做一个foreach:

   Private Shared Sub AddData(ByRef myGDI As GeneralInfo)
    ...
            Using command As SqlCommand = New SqlCommand("INSERT INTO GeneralInfo VALUES(@id, @name)", con)
                command.Parameters.Add(New SqlParameter("id", myGDI.id))
                command.Parameters.Add(New SqlParameter("name", myGDI.name))
                command.ExecuteNonQuery()
            End Using

' Foearch here
            Foreach myData as FullData in myGdi.data
            Using command As SqlCommand = New SqlCommand("INSERT INTO FullData VALUES(@GeneralInfoID, @userRunID, @data)", con)
                command.Parameters.Add(New SqlParameter("GeneralInfoID", myGDI.id))

' Use myData here
                command.Parameters.Add(New SqlParameter("userRunID", myData.userRunId))
                command.Parameters.Add(New SqlParameter("data", myData.data))
                command.ExecuteNonQuery()
            End Using
    Next
    ...
    End Sub