将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;
对于这个选项,我该如何让它使用连接字符串?例如:'connection.Execute(“INSERT INTO [dbo]。[TABLE]([COLUMN])VALUES(@remote_address)”,jobjectBody);' – Marcus
只需将'remote_address'传递给'Execute()' – Mikhail