C#嵌套JSON反序列化映射实体并逐条存储到数据库的实现方法
嵌套JSON兼容实现方案
实现思路
你当前写的字典反序列化代码已经走对了核心适配逻辑:Newtonsoft.Json会自动把嵌套JSON里每一个子对象的字段,一一匹配到原有ResultData类的属性上,每个字典项的Value和之前单段扁平JSON反序列化得到的实体没有任何区别。
只需要把原本单条数据的处理流程,挪进字典遍历的循环体中,就能100%复用原有代码,不需要调整实体结构、不需要改写映射方法。
可直接运行的代码
// 1. 嵌套JSON反序列化(和你现有写法保持一致) var nestedResultDict = JsonConvert.DeserializeObject<Dictionary<string, Models.ResultData>>(content); // 2. 遍历处理每一段嵌套数据 foreach (var (groupName, resultDataModel) in nestedResultDict) { // 复用原有映射逻辑,无任何改动 var dbEntity = resultDataModel.ToData(); // 可选:如果数据库表需要标记数据所属分组(train/test),直接在这里赋值即可 // dbEntity.GroupType = groupName; // 复用原有数据库写入逻辑,无任何改动 await _dataContext.ResultData.AddAsync(dbEntity); } // 统一批量提交事务,比循环内单条提交的数据库性能更优 await _dataContext.SaveChangesAsync();
注意事项
- 打印
resultDataModel时显示内容不全,是因为ResultData类没有重写ToString()方法,不属于反序列化失败,所有属性值都是完整映射的,可以直接通过resultDataModel.Msee这类属性访问验证。 - 不需要修改原有
ResultData的属性定义:嵌套JSON中每个子对象的字段和原扁平JSON的字段完全一致,反序列化匹配逻辑和之前单段处理完全相同,不会出现字段映射缺失的问题。 - 如果后续遇到更深层的嵌套结构,只要每一层的子对象结构和
ResultData匹配,只需要在对应层级循环取出实体,就能继续复用相同的映射、存库逻辑,不需要重复编写转换代码。
内容的提问来源于stack exchange,提问作者ScuffedCoder
相关产品推荐
相关产品推荐

