【问题标题】:How to write a JSON deserialized nested object into a database如何将 JSON 反序列化的嵌套对象写入数据库
【发布时间】:2018-03-23 11:01:12
【问题描述】:

通过 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 中的数据作为字符串保存在数据库中。

【问题讨论】:

  • 这是我以后要处理的另一个问题,因为数据只是用分号分隔的一堆数据。
  • myGDI 类型为 GeneralInfo具有 userRunID 的属性,而是具有FullData 对象的列表,每个 其中具有该属性。您需要在此处详细说明您要完成的工作。
  • 我添加了一个解释。
  • 将对象存储到表是像实体框架这样的 ORM 的工作

标签: sql .net json


【解决方案1】:

你需要在 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

【讨论】:

    猜你喜欢
    • 2017-10-29
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2017-12-28
    • 1970-01-01
    相关资源
    最近更新 更多