将JSON导入到SQL

问题描述:

我正在通过Azure函数将Webhook导入到SQL数据库。将JSON导入到SQL

当我导入使用

{ 
     "remote_address": "1234", 
} 

这工作。

但是当我导入使用

{ 
     "transaction": { 
      "remote_address": "1234", 
    } 
} 

它不工作。

Azure的功能代码我是:

using System.Net; 
using Dapper; 
using System.Data.SqlClient; 
using System.Configuration; 

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log) 
{ 
log.Info($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}"); 

var successful =true; 
try 
{ 
    var cnnString = ConfigurationManager.ConnectionStrings["sqlConnection"].ConnectionString; 

    using(var connection = new SqlConnection(cnnString)) 
    { 
     connection.Open(); 

     var rLog = await req.Content.ReadAsAsync<LogRequest>(); 

     // insert a log to the database 
     connection.Execute("INSERT INTO [dbo].[TABLE] ([COLUMN]) VALUES (@remote_address)", rLog); 
     log.Info("Log added to database successfully!"); 
    } 
} 
catch 
{ 
    successful=false; 
} 

return !successful 
    ? req.CreateResponse(HttpStatusCode.BadRequest, "Unable to process your request!") 
    : req.CreateResponse(HttpStatusCode.OK, "Data saved successfully!"); 
} 

public class LogRequest 
{ 
    public int Id{get;set;} 
    public string remote_address{get;set;} 
} 

我怎样才能获得嵌套JSON对象?

基本上你可以嵌套你的C#类,以便它们对应于JSON结构:

public class Transaction 
{ 
    public string remote_address { get; set; } 
} 

public class LogRequest 
{ 
    public Transaction transaction { get; set; } 
} 

要扩大米哈伊尔的很好的答案,根据您的要求它有时最容易使用JObject/dynamic

var jobjectBody = await req.Content.ReadAsAsync<JObject>(); 
dynamic dynamicBody = jobjectBody; 
string remote_address = dynamicBody.transaction.remote_address; 
+0

对于这个选项,我该如何让它使用连接字符串?例如:'connection.Execute(“INSERT INTO [dbo]。[TABLE]([COLUMN])VALUES(@remote_address)”,jobjectBody);' – Marcus

+0

只需将'remote_address'传递给'Execute()' – Mikhail