You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB/C#中如何访问JSON反序列化的嵌套对象并写入数据库

解决方案:访问嵌套的FullData属性并写入关联数据库表

你已经完成了JSON反序列化的核心步骤,接下来只需要通过嵌套循环遍历GeneralInfo及其内部的FullData集合,就能轻松访问到userRunID和data属性,再结合生成的GeneralInfoId写入两张关联表。下面我给你提供VB.NET和C#的实现示例,假设你用Entity Framework Core操作数据库(用ADO.NET的话思路完全一致):

VB.NET 实现示例

' 假设你的DbContext已定义对应DbSet
Public Sub AddData(allData As List(Of GeneralInfo))
    Using context As New YourDbContext()
        For Each generalInfo In allData
            ' 1. 插入主表(GeneralInfo对应的数据库表)
            Dim dbGeneralInfo As New DbGeneralInfo With {
                .Id = generalInfo.id,
                .Name = generalInfo.name
            }
            context.DbGeneralInfos.Add(dbGeneralInfo)
            context.SaveChanges() ' 保存后才能获取自动生成的GeneralInfoId(自增主键场景)
            
            ' 2. 遍历嵌套的FullData集合,插入子表
            For Each fullData In generalInfo.data
                ' 处理List(Of String):若子表存JSON则序列化;若拆分存储可再加一层循环
                Dim dataJson As String = JsonConvert.SerializeObject(fullData.data)
                
                Dim dbFullData As New DbFullData With {
                    .GeneralInfoId = dbGeneralInfo.Id, ' 关联主表的外键
                    .UserRunID = fullData.userRunID,
                    .Data = dataJson
                }
                context.DbFullDatas.Add(dbFullData)
            Next
            
            ' 批量保存子表数据
            context.SaveChanges()
        Next
    End Using
End Sub

C# 实现示例

public void AddData(List<GeneralInfo> allData)
{
    using (var context = new YourDbContext())
    {
        foreach (var generalInfo in allData)
        {
            // 插入主表
            var dbGeneralInfo = new DbGeneralInfo
            {
                Id = generalInfo.id,
                Name = generalInfo.name
            };
            context.DbGeneralInfos.Add(dbGeneralInfo);
            context.SaveChanges();
            
            // 遍历FullData集合插入子表
            foreach (var fullData in generalInfo.data)
            {
                // 处理List<string>:序列化为JSON字符串存储
                string dataJson = JsonConvert.SerializeObject(fullData.data);
                
                var dbFullData = new DbFullData
                {
                    GeneralInfoId = dbGeneralInfo.Id,
                    UserRunID = fullData.userRunID,
                    Data = dataJson
                };
                context.DbFullDatas.Add(dbFullData);
            }
            
            context.SaveChanges();
        }
    }
}

关键细节说明:

  • 嵌套循环逻辑:外层循环遍历每个GeneralInfo实例,内层循环遍历它的data属性(List(Of FullData)),以此访问每个FullData的userRunID和data。
  • 外键关联:插入主表后必须先调用SaveChanges(),这样才能拿到数据库生成的GeneralInfoId(自增主键场景),再把这个ID作为外键赋值给子表的GeneralInfoId字段。
  • List(Of String)处理:如果子表直接存储字符串列表,通常会序列化为JSON字符串;如果需要把每个字符串单独存入另一张关联表,只需在遍历fullData.data时再加一层循环即可。

内容的提问来源于stack exchange,提问作者ruedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:50:22