【问题标题】:Inserting JSON file into SQL Server when JSON contains a list当 JSON 包含列表时将 JSON 文件插入 SQL Server
【发布时间】:2019-12-03 12:08:14
【问题描述】:

我正在尝试通过 .Net Core 应用程序将 JSON 文件导入 SQL 服务器。

我已经使用 VS 中的工具设置了我的类,该工具将JSON 文档转换为类。然后我使用它来使用 EF Core 迁移创建数据库。

我已使用以下方法将JSON 反序列化到我的RootObject 类中:

RootObject rootObject = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(jsonFromFile);

我可以展开 RootObject 对象,一切看起来都不错,我可以看到每个字段并且它包含正确的数据。

然后我想将此数据插入数据库,我目前有:

var mySolve = new RootObject
            {
                uuid = rootObject.uuid,
                solution = new Solution { gross_margin = rootObject.solution.myValue, imbalances = rootObject.solution.imbalances  }
            };


            db.RootObjects.Add(mySolve);
            db.SaveChanges();
            db.Dispose();

问题是不平衡类是json文件中的一个列表,如下所示:

"solution": {
        "myValue": 9999.99,
        "imbalances": [
            {
                "commodity": "Value1",
                "name": "Val1",
                "direction": "INPUT",
                "amount": 1.419884
            },
            {
                "commodity": "Value2",
                "name": "Val2",
                "direction": "INPUT",
                "amount": 1.419884
            }
        ]
    }

我的应用中的不平衡类如下所示:

public class Imbalance
    {
        public int Id { get; set; }
        public string commodity { get; set; }
        public string name { get; set; }
        public string direction { get; set; }
        public float amount { get; set; }
    }

我的应用在db.RootObjects.Add(mySolve); of 上引发异常:

实体类型上的导航属性“不平衡”的类型 “解决方案”是“不平衡 []”,它是一种数组类型。收藏 导航属性不能是数组。

如何将此对象插入我的数据库?

更新

我的 JSON 文件中的每个部分都有一个表,因为我的类库是从 JSON 文件自动生成的。不平衡表如下所示:

【问题讨论】:

  • 你的上下文是什么样的?你为不平衡创建了一个表吗?他们有身份证吗?您不能在数据库中插入一组匿名对象。
  • 与您的问题无关,但我不喜欢名为 RootObject 的表。因为 Json2Csharp 以这种方式命名对象。
  • 我认为结合下面@nAviD 的回答。只是在 mo 测试一切。我同意你关于 RootObject 名称的看法,一旦我离开开发,我将更改它。

标签: c# json sql-server


【解决方案1】:

RootObject 中,将Imbalances 属性的类型从Imbalance[] 更改为List&lt;Imbalance&gt; 或派生自ICollection 的任何类。

【讨论】:

  • 这似乎行得通,让我再做一些测试,如果成功,我会回来标记为答案
猜你喜欢
  • 1970-01-01
  • 2021-02-19
  • 2021-03-23
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 2023-01-27
  • 2017-06-25
  • 1970-01-01
相关资源
最近更新 更多