【问题标题】:How to auto generate/create SQL server table from JSON in C#如何在 C# 中从 JSON 自动生成/创建 SQL 服务器表
【发布时间】:2019-12-03 08:15:33
【问题描述】:

我正在从用户那里获取表单数据的 JSON。下面是 JSON 数据的例子

{  
   "Name":"Mike",
   "Age":25,
   "Gender":"Male",
   "Skills":{  
      ".Net":true,
      "Mule":""
   }
}

我想将这些数据保存在一个表中(SQL Server)。数据库中没有表,我想在将此数据发送到 sql 之前定义表名。有什么方法可以实现这一点。请帮忙。

【问题讨论】:

  • 你可以反序列化这个 JSON 字符串,然后将它存储在一个表中。
  • 嗨@SᴇM,因为我是新手。能否请您举例说明一下。
  • 这个问题我不清楚。您想将此 Json 存储在数据库中,但您没有表吗?那么你想在数据库运行时创建表吗?
  • 是的,我想在运行时创建表。 @SelimYıldız

标签: c# .net json asp.net-web-api


【解决方案1】:

假设您的问题不是关于如何将 json 转换为 c# 对象,而是关于如何将其存储在 SQL Server 中同时仍然能够查询它,那么您实际上可以在 sql server 中使用 json 数据:https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server?view=sql-server-ver15

如果我没有预先设置架构或者我知道它会经常更改,我会选择类似的东西。然后,我将创建一个名为 FormData 的表,其中包含 Id 和 Data 字段,并将您的 JSON 存储在其中。

请记住,这可能不如定义表和正确解析 json 性能(此处的其他答案已涵盖) - 确保在考虑了无模式存储的所有优点和缺点后进行调用。

更新:如果您绝对必须在运行时创建表,您可能会使用纯 ADO.NET 运行纯 SQL DDL 语句,例如“CREATE TABLE”

【讨论】:

    【解决方案2】:

    我建议使用json2csharp 将 JSON 转换为 C# 模型并更改无法识别的名称

        public class Skills
        {
            [JsonProperty(PropertyName = ".Net")] //Add JsonProperty to include unclassified names
            public bool DotNet { get; set; }
            public string Mule { get; set; }
        }
    
        public class RootObject10
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public string Gender { get; set; }
            public Skills Skills { get; set; }
        }
    

    然后,您可以使用 JsonConvert 反序列化 json

    using (StreamReader r = new StreamReader(filepath))
    {
          string json = r.ReadToEnd();
          var obj = JsonConvert.DeserializeObject<RootObject10>(json);
    }
    

    在此之后,根据您的要求创建单个数据表或 2 个数据表并注入数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      • 2010-12-17
      • 2020-08-28
      • 2019-04-27
      • 2018-03-10
      • 2012-06-21
      • 1970-01-01
      相关资源
      最近更新 更多