使用 C# 将 JSON 文本插入 SQL

Posted

技术标签:

【中文标题】使用 C# 将 JSON 文本插入 SQL【英文标题】:Insert JSON text into SQL using C# 【发布时间】:2016-07-03 20:36:00 【问题描述】:

我有以下 JSON 字符串,我想使用 C# 在 SQL 数据库中插入值。


  "request": 
    "Target": "Affiliate",
    "Format": "jsonp",
    "Service": "Offers",
    "Version": "2",
    "NetworkId": "dotcominfoway",
    "Method": "findAll",
    "api_key": "4bf7ba7b1904716179c9284cbd",
    "callback": "angular.callbacks._2",
    "_ga": "GA1.2.894200611.1458193988"
  ,
  "response": 
    "status": 1,
    "httpStatus": 200,
    "data": 
      "2204": 
        "Offer": 
          "id": "2204",
          "name": "App Of the Day android IN Incent",
          "description": "STEP 1 : You can place your own logo/creative in the offer wall as you like or you can place our creative.\r\n\r\nSTEP 2: If user clicks it will redirect to the play store to any application which he/she haven’t downloaded before in their device.\r\n\r\nSTEP 3 : User have to install the application and open it.",
          "require_approval": "1",
          "require_terms_and_conditions": 0,
          "terms_and_conditions": null,
          "preview_url": "http://appfly.mobi/red/02b4ef54-144b-11e5-a076-0cc47a44dbaa/?alg=2",
          "currency": null,
          "default_payout": "0.20000",
          "status": "active",
          "expiration_date": "2016-06-17 03:59:59",
          "payout_type": "cpa_flat",
          "percent_payout": "100.00",
          "featured": null,
          "conversion_cap": "0",
          "monthly_conversion_cap": "0",
          "payout_cap": "0.00",
          "monthly_payout_cap": "0.00",
          "allow_website_links": "0",
          "allow_direct_links": "0",
          "show_custom_variables": "0",
          "show_mail_list": "0",
          "dne_list_id": "0",
          "email_instructions": "0",
          "email_instructions_from": "",
          "email_instructions_subject": "",
          "has_goals_enabled": "0",
          "default_goal_name": "",
          "use_target_rules": "0",
          "is_expired": "0",
          "dne_download_url": null,
          "dne_unsubscribe_url": null,
          "dne_third_party_list": false
        
      ,
      "3669": 
        "Offer": 
          "id": "3669",
          "name": "Cash On IN Incent CPR",
          "description": "Automatic OTP",
          "require_approval": "1",
          "require_terms_and_conditions": 0,
          "terms_and_conditions": null,
          "preview_url": "https://play.google.com/store/apps/details?id=com.softn",
          "currency": "INR",
          "default_payout": "12.00000",
          "status": "active",
          "expiration_date": "2016-09-29 03:59:59",
          "payout_type": "cpa_flat",
          "percent_payout": null,
          "featured": null,
          "conversion_cap": "1000",
          "monthly_conversion_cap": "0",
          "payout_cap": "0.00",
          "monthly_payout_cap": "0.00",
          "allow_website_links": "0",
          "allow_direct_links": "0",
          "show_custom_variables": "0",
          "show_mail_list": "0",
          "dne_list_id": "0",
          "email_instructions": "0",
          "email_instructions_from": "",
          "email_instructions_subject": "",
          "has_goals_enabled": "0",
          "default_goal_name": "",
          "use_target_rules": "0",
          "is_expired": "0",
          "dne_download_url": null,
          "dne_unsubscribe_url": null,
          "dne_third_party_list": false
        
      

.......等等

我已经编写了以下代码插入数据集,但它给出了错误。

 string url = "http:api.offers.com/Apiv3/json?NetworkId=inf&Target=Affiliate_Offer&Method=findAll&api_key=4bf7ba7b1904716179c9284cbd7db17018b8a5f";
            string JsonString = new WebClient().DownloadString(url);
            DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(JsonString);
            DataTable dataTable = dataSet.Tables["request"];
            Console.WriteLine(dataTable.Rows.Count);
            foreach (DataRow row in dataTable.Rows)
            
                Console.WriteLine(row["Target"] + " - " + row["Format"]);
            

获取错误:

信息:读取 DataTable 时出现意外的 JSON 令牌。预期的 StartArray,得到了 StartObject。路径“请求”,第 1 行,位置 12。

所以,请帮我将 Json 转换为 Dataset,然后插入 SQL 数据库或直接插入 SQL 数据库。 我目前正在使用 newtonsoft.json。 出于我的目的,也欢迎其他简单的选项。

【问题讨论】:

【参考方案1】:

反序列化器不知道如何处理 DataSet 类型。

看这个答案:https://***.com/a/11982180/1235106

【讨论】:

以上是关于使用 C# 将 JSON 文本插入 SQL的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 中的 JSON 数据

使用 C# 和 OPENJSON 将 JSON 插入 SQL Server 2016

如何使用 jquery/javascript 将文本插入 json [重复]

使用 C# 在文本中插入制表符

将 JSON 文本插入 DB2 表

将文本插入 C# 表单