【问题标题】:store json data in database using C# [closed]使用C#将json数据存储在数据库中[关闭]
【发布时间】:2017-02-06 19:21:25
【问题描述】:
temp= {
       "Vikas": 1,
       "Pravin": 2,
       "Akshay": 5,
       "Vijay": 3,
       "Prasad": 4 
      }

这是我在临时变量中获得的值我想将此数据存储在数据库中,并带有一个附加列,如下所示

name      rank   createdby
vikas      1       nitin
pravin     2       nitin
akshay     5       nitin
vijay      3       nitin
Prasad     4       nitin


Note:  name column is employee name so it is anything 

我尝试过喜欢进入 C#

[System.Web.Services.WebMethod]
public static string setAnswer(string jsondata)
{
    List<string[]> data = JsonConvert.DeserializeObject<List<string[]>>(jsondata);
}

问题。

1) 如何在 C# 和 add additional column 中获取此 json data

2) 是否可以在一个查询中使用多行插入来传递整个数据,而不是使用循环并插入单行。

【问题讨论】:

  • 你使用什么类型的数据库访问?英孚?阿多? NHibernate?
  • 取决于您使用的数据库。如果数据库允许 bulkinsert 它绝对可能。要将一行添加到数组中,您必须复制整个数组。
  • 升级到 sql server 2016
  • 是的,为了避免循环,您可以使用表值参数,您需要将列表转换为数据表检查此链接blog.sqlauthority.com/2008/08/31/… 如果您需要更多帮助,请告诉我
  • 我假设temp = 是您说您有一个包含该内容的变量的方式,而不是说这是有效负载/字符串的一部分,因为这部分不是合法的 json。

标签: c# sql-server-2008 json.net


【解决方案1】:

反序列化此内容的正确方法:

{
    "Vikas": 1,
    "Pravin": 2,
    "Akshay": 5,
    "Vijay": 3,
    "Prasad": 4 
}

是将其反序列化为Dictionary&lt;string, int&gt;

这是一个LINQPad 示例:

void Main()
{
    const string json = @"{
        ""Vikas"": 1,
        ""Pravin"": 2,
        ""Akshay"": 5,
        ""Vijay"": 3,
        ""Prasad"": 4
    }";
    Dictionary<string, int> empsAndNumbers =
        JsonConvert.DeserializeObject<Dictionary<string, int>>(json);
    empsAndNumbers.Dump();
}

哪个输出:

【讨论】:

    【解决方案2】:

    解释后编辑:

    您可以通过这种方式将其反序列化为字典:

    var data = JsonConvert.DeserializeObject<Dictionary<string, int>>(temp);
    

    我在这一点上我们有数据字典。 如何将其保存到 DB 取决于您如何访问 db。

    【讨论】:

    • 感谢您的回复,但没有..没有...这是员工姓名,所以我无法将其设为静态,可能是任何内容,因此无法上课
    • 字符串转int的字典更合适,Dictionary&lt;string, int&gt;
    • @Pravin 你别说,这对于解决方案来说是非常重要的事情。编辑问题并添加此信息。
    • @LasseV.Karlsen 这个信息你是对的
    • 好的,我会补充问题
    【解决方案3】:

    创建一个实体:MemberRank

    public class MemberRank
    {
        public int Id { get; set; }
        public string MemberName { get; set; }
        public int Rank{ get; set; }
        public string CreatedBy { get; set; }
    }
    

    然后在Controller中,

    var membersText = File.ReadAllText(Path.Combine(envContentRootPath, @"PathOfTheFile"));
    var members = JsonConvert.DeserializeObject<List<MemberRank>>(membersText);
    members.ForEach(cb => cb.CreatedBy = "nitin");
    _dbContext.Set<MemberRank>().AddRange(members);
    _dbContext.SaveChanges();
    

    为此,您需要按如下方式更改您的 json 文件:

    [
      {
         "memberName" : "Vikas",
         "rank" : 1
      },
      {
         "memberName" : "Pravin",
         "rank" : 2
      },
      {
         "memberName" : "Akshay",
         "rank" : 5
      },
      {
         "memberName" : "Vijay",
         "rank" : 3
      },
      {
         "memberName" : "Prasad",
         "rank" : 4
      }
    ]
    

    【讨论】:

    • 如何让 Json.net 将示例 json 反序列化为您的 MemberRank 类型?
    • 您在哪里有关于 EF 的问题信息?
    • 我假设他正在使用 EF,先生。
    猜你喜欢
    • 2013-02-07
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多