JSON转C#类并存入数据库时遇反序列化错误求助
解决JSON数组反序列化为C#对象的错误及数据库存储方案
嘿,我一眼就看出问题所在啦!你遇到的反序列化错误,核心原因是你的JSON数据是数组格式(包含多个Rootobject类型的对象),但你却尝试把它反序列化成单个Rootobject实例——这就像要把一筐苹果塞进一个苹果的包装盒里,肯定行不通呀。
下面一步步帮你解决问题:
1. 修正反序列化代码
把反序列化的目标类型从单个Rootobject改成List<Rootobject>,这样才能匹配JSON数组的结构:
// 替换原来的单个对象反序列化代码 List<Rootobject> raList = JsonConvert.DeserializeObject<List<Rootobject>>(json);
2. 修复JSON格式问题
你提供的JSON片段外层缺少数组的方括号[],而且第二个对象的xyz5后面多了个多余的逗号,这都会导致反序列化失败。修正后的正确JSON应该是这样的:
[ { "qqq": "xxxx", "rrrr": "xxxxx", "abc": { "abc1": "xxxxx", "abc2": "xxxxx", "abc3": "xxxxx", "abc4": "xxxxx", "abc5": "2018-05-28T06:10:00.000" }, "xyz": { "xyz1": "xxxxx", "xyz2": "xxxxx", "xyz3": "xxxxx", "xyz4": "xxxxx", "xyz5": "2018-05-28T07:30:00.000" } }, { "qqq": "xxxxx", "rrrr": "xxxxx", "abc": { "abc1": "xxxxx", "abc2": "xxxxx", "abc3": "xxxxx", "abc4": "xxxxx", "abc5": "2018-05-28T06:10:00.000" }, "xyz": { "xyz1": "xxxxx", "xyz2": "xxxxx", "xyz3": "xxxxx", "xyz4": "xxxxx", "xyz5": "2018-05-28T07:30:00.000" } } ]
3. 将数据存储到数据库
这里用Entity Framework Core举个简单的批量存储例子,如果你用其他框架(比如ADO.NET)逻辑类似:
第一步:定义DbContext
public class AppDbContext : DbContext { // 对应数据库中的表 public DbSet<Rootobject> RootObjects { get; set; } public DbSet<Abc> Abcs { get; set; } public DbSet<Xyz> Xyzs { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // 替换成你的数据库连接字符串 optionsBuilder.UseSqlServer("Server=你的服务器;Database=你的数据库;Trusted_Connection=True;"); } }
第二步:批量存储数据
using (var context = new AppDbContext()) { // 把反序列化得到的所有对象批量添加到上下文 context.RootObjects.AddRange(raList); // 提交更改到数据库 context.SaveChanges(); }
注意:如果希望
Abc和Xyz作为Rootobject的关联数据自动存储,需要确保实体类配置了正确的导航关系(比如用[ForeignKey]特性或者Fluent API),避免出现数据缺失的情况。
内容的提问来源于stack exchange,提问作者raj
相关产品推荐
相关产品推荐

