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
相关产品推荐
相关产品推荐

