2017-04-05 50 views
0

我正在通過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對象?

回答

2

基本上你可以嵌套你的C#類,以便它們對應於JSON結構:

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

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

要擴大米哈伊爾的很好的答案,根據您的要求它有時最容易使用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